php中的字符串和正則表達式
一、字符串类型的特点
1、PHP是弱类型语言,其它数据类型一般都能够直接应用于字符串函数操作。
1: <? php
2: echo substr("123456",2,4); //输出345
3: echo substr(123456,2,4); //输出345
4: echo hello; //先查找hello常量,若没找到,将hello看做字符串使用
5: ?>
2、字符串能够作为“数组”,是字符的集合。
1: <?php
2: $str = "www.ido321.com";
3: echo $str[0];
4: echo $str[1];
5: echo $str[2];
6: ?>
可是字符串不是真的数组,不能使用数组的函数.如count($str)不会返回字符串长度。PHP引擎无法区分字符和数组,产生二义性。
自PHP4起。已经用花括号替代方括号。
1: <?php
2: //为保证向后兼容,方括号仍然能够使用
3: $str = "www.ido321.com";
4: echo $str{0};
5: echo $str{1};
6: echo $str{2};
7: ?>
3、双引號变量解析
在PHP中,当用双引號或者定界符定义字符串时,当中的变量会被解析。
1: <? php
2: $arr = array('name' => "dwqs",'add' => "www.ido321.com");
3: echo "$arr[name]"; //能够解析。可是在方括号里不能使用引號
4: //echo "$arr['name']"; 错误
5: echo "{$arr['name']}"; //能够解析,用花括号包括元素,name不带引號也是能够的
6:
7: //如果存在对象$square
8: echo "$square->width"; //能够解析
9: echo "$square->width00 cent"; //不能够解析。用花括号解决
10: echo "{$square->width}width00 cent"; //能够解析
11: ?>
二、字符串输出函数
三、经常使用的字符串格式函数
PS:PHP的字符串处理函数大部分不正确源字符串做改动,而是返回新的字符串
四、正則表達式
正則表達式描写叙述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配、查找、替换和分隔等操作。由原子、元字符和模式修正符三部分组成的文字模式。
在PHP中,有两套正则的处理函数库:PCRE和POSIX。前者以preg_前缀命名,与Perl兼容;后者以ereg_前缀命名。二者功能相似,但PCRE的效率略高。
与Perl语言兼容的正則表達式处理函数:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1、语法
1.1 定界符:在与Perl兼容的正则函数中使用模式时,必须给模式加上定界符。除了字母、数字和反斜线(\)之外的不论什么字符都能够作为定界符号
1: <?php
2: //下面正则合法
3: echo $m1 = '/<\/\w+/';
4: echo $m2 = '|(\d{3})-\d|Sm';
5: echo $m3 = '!^(?i)php[34]!';
6: echo $m4 = '{^\s+(\s+)?$}';
7: ?>
1.2 原子:原子包括了普通字符。如字母、数字;非打印字符,如空格、回车。特殊字符和元字符。如引號、*、+等。必须用”\”进行转义;自己定义原子表,如[apj]、[a-z]。通用字符类型。如\d、\D。
1: <? php
2: //以下二者等价,匹配e-mail
3: $mail1 = '/^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\.[0-9a-zA-Z]+){0,3}$/';
4: $mail2 = '/^\w+@\w+(\.\w+){0,3}$/';
5: ? >
1.3 元字符:用于构建正則表達式的具有特殊含义的字符。
Perl能够使用各种元字符来搜索匹配,如*、+、?.常见的元字符例如以下
1.4 模式修正符:在正则的定界符之外使用,扩展正则在匹配、替换等方面的功能。
2.与Perl兼容的正則表達式函数
2.1 preg_match(string pattern,string subject[,array matches]):用于对字符串的查找和匹配。參数说明:
pattern是正则,subject是须要处理的字符串,可选的matches用于保存于pattern的各个子模式的匹配结果,matches[0]保存了与pattern匹配的总体内容,matches[1]保存了pattern中第一个小括号里匹配的内容,以此类推。
1: <?php
2: header("content-type:text/html;charset=utf8");
3: $pattern = '/(http):\/\/(www)\.([^\.\/]+)\.(com|net|org)/i';
4: $subject = "我的博客:http://www.ido321.com";
5: if(preg_match($pattern, $subject,$matches)){
6: echo "搜索的URL是:".$matches[0]."<br/>"; //数组第1个元素保存整个匹配结果
7: echo "URL中的协议是:".$matches[1]."<br/>";//数组第2个元素保存第1个字表达式
8: echo "URL中的主机是:".$matches[2]."<br/>";//数组第3个元素保存第2个字表达式
9: echo "URL中的域名是:".$matches[3]."<br/>";//数组第4个元素保存第3个字表达式
10: echo "URL中的顶域是:".$matches[4]."<br/>";//数组第5个元素保存第4个字表达式
11: }
12: ?>
结果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
preg_match_all()与preg_match()函数类似。不同的是前者会一直匹配到字符串末尾,后者在第一次匹配后就停止匹配。
2.2 preg_grep(string pattern,array iput):匹配数组中的元素,返回与正则匹配的数组单元。參数说明:
pattern是正则。input是须要匹配的数组。
1: <? php
2: $arr = array('Linux RedHat9.0','Apache2.2.9','MySQL5.0.51','PHP5.2.6','LAMP','100');
3: $version = preg_grep('/^[a-zA-Z]+(\d|\.)+$/',$arr);
4:
5: //输出:Array([1]=>Apache2.2.9 [2]=>MySQL5.0.51 [3]=>PHP5.2.6)
6: print_r($version);
7: ? >
2.3 preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit]):字符串替换。说明:
该函数会在subject中搜索与pattern的匹配项,并用replacement替换。limit用于限制匹配的次数。即替换的次数。
1: <?php
2: $pattern = '/<[\/\!]*? [^<>]*? /is';
3: $text = '这个文本有<b>粗体</b>和<u>带有下划线</u>以及<i>斜体</i>';
4: echo preg_replace($pattern,"",$text); //将全部HTML标记替换为空
5: echo preg_replace($pattern,"",$text,2); //值替换前2个HTML标记
6: ? >
2.4 preg_split(string pattern,string subject[,int limit[,int flags]]):对字符串进行切割。
说明:
函数返回一个数组。
数组元素包括subject中与pattern匹配作为边界所切割的字符串。limit含义见2.3,flags含义请參考文档。
1: <? php
2: //按任数量的空格切割字符串
3: $kerwords = preg_split("/[\s,]+/","hypertext language,programming");
4:
5: //输出:Array([0]=>hypertext [1]=>language,[2[=>programming)
6: print_r($kerwords);
7: ? >
php中的字符串和正則表達式的更多相关文章
- python之路-------字符串与正則表達式
1.1.#####去掉字符串中的转义符string.strip() print "hello\tworld\n" >>> word="\thello w ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- 使用正則表達式的格式化与高亮显示json字符串
使用正則表達式的格式化与高亮显示json字符串 json字符串非常实用,有时候一些后台接口返回的信息是字符串格式的,可读性非常差,这个时候要是有个能够格式化并高亮显示json串的方法那就好多了,以下看 ...
- JAVA中正則表達式总结(具体解释及用途)
很多语言,包含Perl.PHP.Python.JavaScript和JScript,都支持用正則表達式处理文本,一些文本编辑器用正則表達式实现高级"搜索-替换"功能.所以JAVA语 ...
- Java正則表達式入门
众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...
- Linux正則表達式-反复出现的字符
星号(*)元字符表示它前面的正則表達式能够出现零次或多次.也就是说,假设它改动了单个字符.那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个.能够使用星号元字符匹配出如今引號中 ...
- python进阶十_正則表達式(一)
近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
- DOM笔记(十):JavaScript正則表達式
一.RegExp ECMAScript通过RegExp类型类支持正則表達式,语法和Perl类似: var exp = /pattern/flags; patternb部分是不论什么简单的或复杂的正則表 ...
- iOS正則表達式(一)
什么是正則表達式? 正則表達式是对字符串操作的一种逻辑公式. 作用? 在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等.我们还能 ...
随机推荐
- 笔记-迎难而上之Java基础进阶-终
使用Stream流的方式,遍历集合 import java.util.*; public class StreamDemo{ public static void main(String[] args ...
- 【redis】存入redis的值,如果为null是否默认不被存入
存入redis的值,如果为null是否默认不被存入
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
- 第一次用THINKPHP 报路径错
我第一次 看网上写的代码 define('THINK_PATH','ThinkPHP');define('App_NAME','43');define('App_PATH','.'); require ...
- HPU 3639--Hawk-and-Chicken【SCC缩点反向建图 && 求传递的最大值】
Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 用Golang写的域名信息搜集工具
blacksheepwall是一款由Go语言编写的域名信息搜集工具 ,你也可以在你的工具中将它作为一个独立软件包来使用. 下载 blacksheepwall支持跨平台,目前它所支持的系统有window ...
- overlay和overlay2的区别
docker作为一个容器平台,它有一套自己的存储系统.它支持的driver有overlay,overlay2, aufs等等. 这篇文章主要分析overlay和overlay2的区别. overlay ...
- 查看Linux上MySQL版本信息
如果MySQL是用rpm或者yum安装的,可用 #rpm -qa|grep mysql查看. 如: [root@asd76 ~]# rpm -qa|grep mysqlmysql-5.1.73-3.e ...
- Solidworks如何使用Toolbox
Toolbox不仅仅是智能扣件.事实上,一般常见的轴承,螺栓,齿轮都有了,点击右侧的设计库即可展开Toolbox 配置完成后我只留下一个GB 比如我要选一个圆锥滚子轴承,从右边拖进来即可 ...
- leetcode 46-Permutations and 47-Permutations II
Permutations Given a collection of numbers, return all possible permutations. For example, [1,2,3] h ...