( ! ) Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in D:\www\up\php\php_regex.php on line 20 | ||||
---|---|---|---|---|
Call Stack | ||||
# | Time | Memory | Function | Location |
1 | 0.0156 | 378000 | {main}( ) | ...\php_regex.php:0 |
( ! ) Warning: include(http://pub.houheaven.com/Nav02/Nav_deep2.htm): failed to open stream: no suitable wrapper could be found in D:\www\up\php\php_regex.php on line 20 | ||||
---|---|---|---|---|
Call Stack | ||||
# | Time | Memory | Function | Location |
1 | 0.0156 | 378000 | {main}( ) | ...\php_regex.php:0 |
( ! ) Warning: include(): Failed opening 'http://pub.houheaven.com/Nav02/Nav_deep2.htm' for inclusion (include_path='.;C:\php\pear') in D:\www\up\php\php_regex.php on line 20 | ||||
---|---|---|---|---|
Call Stack | ||||
# | Time | Memory | Function | Location |
1 | 0.0156 | 378000 | {main}( ) | ...\php_regex.php:0 |
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的主要作用:对指定字符串进行匹配、分割、查找、替换。
语法:preg_match(RegEx,String,Array,Flag,Offset)
参数:RegEx - 正则语法,要求有一对相同的开始和结束标识,可以是 @ | # / 等。
String - 正则内容,必选参数,要匹配的字符串。
Array - 正则结果,将匹配到的结果保存到数组中,默认是一维数组。
Flag - 正则标识,默认是 0,不显示匹配结果的偏移量,PREG_OFFSET_CAPTURE 显示。
说明:此函数在成功匹配到第一个结果后会停止匹配,只匹配一次。
返回:返回匹配到的个数。
语法:preg_match(RegEx,String,Array,Flag,Offset)
参数:Array - 正则结果,将匹配到的结果保存到数组中,默认是二维数组。
Flag - 正则标识,PREG_OFFSET_CAPTURE、PREG_SET_ORDER、PREG_PATTERN_ORDER。
说明:此函数在成功匹配到第一个结果后会继续匹配,匹配多次。
返回:返回匹配到的个数。
语法:preg_replace(RegEx,Replace,String,Limit,Count)
参数:RegEx - 正则规则,可以是字符串或者数组。
Replace - 替换规则,可以是字符串、数组、运算函数。
String - 替换内容,要进行搜索和替换的字符串或字符串数组。
Limit - 替换限制,限制替换的次数。
Count - 替换次数,默认为 -1,无限次,将替换的次数保存到一个变量中。
返回:取决于 String 类型。
语法:preg_split(RegEx,String,Limit,Flag)
参数:RegEx - 正则规则,可以是字符串或者数组。
String - 分割内容,要进行搜索和分割的字符串。
Limit - 分割限制,限制分割的次数。
Flag - 分割标识。
返回:返回一个数组。
普通字符:最常见的字符,如 a-z A-Z 0-9 _
单元字符:普通字符组成的字符集合,用一堆小括号括起来,作为一个整体去匹配,如 (movie),它的规则是在指定字符串中只有出现了 movie 这个字符集合,才会正常匹配到,如果字符串中出现了 movi、mov、vie 等等,都不能正常匹配到。
原子表:用方括号括起来的字符集合,如 [houheaven]、[^houheaven],前者它的规则是在指定字符串中出现了 houheaven 这个字符集合中的任意一部分,正则都能正常匹配到,如 hou、heaven、hea 等等;后者的意思正好相反,字符串中不能出现这些字符才能正常匹配到。
转义字符:表示特殊的字符
转义字符 | 说明 | 表示内容 |
---|---|---|
\b | 包含所有数字 | [0-9] |
\B | 排除所有数字 | [^0-9] |
\w | 包含所有普通字符 | [a-zA-Z0-9_] |
\W | 排除所有普通字符 | [^a-zA-Z0-9_] |
\s | 包含空白区域(空格、回车、换行、分页、水平制表符、垂直制表符) | [\n\r\f\t\v] |
\S | 排除空白区域(空格、回车、换行、分页、水平制表符、垂直制表符) | [^\n\r\f\t\v] |
元字符 | 说明 | 实例 |
---|---|---|
. | 匹配当前字符1次,但不包括回车换行等 | 实例 |
// 说明1:# 表示正则表达式的开始和结束标识,不可省略,可以使用 / @ # 等 // 说明2:. 表示了任意可显示字符(回车 \n 等转义字符除外),只能出现一次 $reg="#go.gle#"; $str1="gogle"; $str2="google"; $str3="gooogle"; $str4="goxgle"; $str5="go*gle"; echo preg_match($reg,$str1,$arr); // 0,指定字符出现0次,匹配失败 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 0,指定字符出现2次,匹配失败 echo preg_match($reg,$str4,$arr); // 1,指定字符属于合法字符,匹配成功 echo preg_match($reg,$str5,$arr); // 1,指定字符属于合法字符,匹配成功 |
||
* | 匹配前一个字符内容的0次、1次或多次 | 实例 |
$reg="#go*gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 1,指定字符出现0次,匹配成功 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 1,指定字符出现2次,匹配成功 echo preg_match($reg,$str4,$arr); // 1,指定字符出现多次,匹配成功 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
+ | 匹配前一个字符内容的1次或多次 | 实例 |
$reg="#go+gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 0,指定字符出现0次,匹配失败 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 1,指定字符出现2次,匹配成功 echo preg_match($reg,$str4,$arr); // 1,指定字符出现多次,匹配成功 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
? | 匹配前一个字符内容的0次或1次 | 实例 |
$reg="#go?gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 1,指定字符出现0次,匹配成功 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 0,指定字符出现2次,匹配失败 echo preg_match($reg,$str4,$arr); // 0,指定字符出现多次,匹配失败 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
{M} | 匹配前一个字符内容的重复次数为 M次(t=M) | 实例 |
$reg="#go{0}gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 1,指定字符出现0次,匹配成功 echo preg_match($reg,$str2,$arr); // 0,指定字符出现1次,匹配失败 echo preg_match($reg,$str3,$arr); // 0,指定字符出现2次,匹配失败 echo preg_match($reg,$str4,$arr); // 0,指定字符出现多次,匹配失败 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
{M,} | 匹配前一个字符内容的重复次数为 大于或等于M次(t≥M) | 实例 |
$reg="#go{1,}gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 0,指定字符出现0次,匹配失败 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 1,指定字符出现2次,匹配成功 echo preg_match($reg,$str4,$arr); // 1,指定字符出现多次,匹配成功 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
{M,N} | 匹配前一个字符内容的重复次数为 M到N次(M≤t≤N) | 实例 |
$reg="#go{0,2}gle#"; $str1="ggle"; $str2="gogle"; $str3="google"; $str4="gooooooogle"; $str5="goxgle"; echo preg_match($reg,$str1,$arr); // 1,指定字符出现0次,匹配成功 echo preg_match($reg,$str2,$arr); // 1,指定字符出现1次,匹配成功 echo preg_match($reg,$str3,$arr); // 1,指定字符出现2次,匹配成功 echo preg_match($reg,$str4,$arr); // 0,指定字符出现多次,匹配失败 echo preg_match($reg,$str5,$arr); // 0,指定字符不符合正则规则,匹配失败 |
||
() | 合并整体匹配,并放入内存,使用 \1 \2 ……依次读取 | 实例 |
$reg="#2000(.*)01\\1(01)#"; // (01) 代表着日期数字,不括起来会干扰 \\1 $str1="2000-01-01"; $str2="2000/01/01"; $str3="2000-01/01"; echo preg_match($reg,$str1,$arr); // 1,前后分割字符是相同的,匹配成功 echo preg_match($reg,$str2,$arr); // 1,前后分割字符是相同的,匹配成功 echo preg_match($reg,$str3,$arr); // 0,前后分割字符是不同的,匹配失败 |
||
| | 选择匹配 | 实例 |
$reg="#google|baidu#"; $str1="google"; $str2="baidu"; $str3="baidugoogle"; $str4="googlebaidu"; $str5="googletempbaidu"; echo preg_match($reg,$str1,$arr); // 1,包含正则内容,匹配成功 echo preg_match($reg,$str2,$arr); // 1,包含正则内容,匹配成功 echo preg_match($reg,$str3,$arr); // 1,包含正则内容,匹配成功 echo preg_match($reg,$str4,$arr); // 1,包含正则内容,匹配成功 echo preg_match($reg,$str5,$arr); // 1,包含正则内容,匹配成功 |
||
^ | 匹配字符串首部内容 | 实例 |
$reg="#^music#"; $str1="music_movie_image"; $str2="movie_music_image"; $str3="movie_image_music"; echo preg_match($reg,$str1,$arr); // 1,匹配字符出现在最前面,匹配成功 echo preg_match($reg,$str2,$arr); // 0,匹配字符没有出现在最前面,匹配失败 echo preg_match($reg,$str3,$arr); // 0,匹配字符没有出现在最前面,匹配失败 |
||
$ | 匹配字符串尾部内容 | 实例 |
$reg="#music$#"; $str1="music_movie_image"; $str2="movie_music_image"; $str3="movie_image_music"; echo preg_match($reg,$str1,$arr); // 0,匹配字符出现在最后面,匹配失败 echo preg_match($reg,$str2,$arr); // 0,匹配字符没有出现在最后面,匹配失败 echo preg_match($reg,$str3,$arr); // 1,匹配字符没有出现在最后面,匹配成功 |
||
\b | 匹配单词边界,边界可以是空格或特殊字符 | 实例 |
$reg="#\bam\b#"; $str1="I am sorry"; $str2="I#am#sorry"; $str3="I@am@sorry"; $str4="I_am_sorry"; $str5="Iamsorry"; echo preg_match($reg,$str1,$arr); // 1,边界符号是空格,匹配成功 echo preg_match($reg,$str2,$arr); // 1,边界符号是#,匹配成功 echo preg_match($reg,$str3,$arr); // 1,边界符号是@,匹配成功 echo preg_match($reg,$str4,$arr); // 0,边界符号不能是_,匹配失败 echo preg_match($reg,$str5,$arr); // 0,边界符号不能是英文字母,匹配失败 |
||
\B | 匹配除单词边界以外的内容 | 实例 |
$reg="#\bam\b#"; $str1="I am sorry"; $str2="I#am#sorry"; $str3="I@am@sorry"; $str4="I_am_sorry"; $str5="Iamsorry"; echo preg_match($reg,$str1,$arr); // 0,匹配失败 echo preg_match($reg,$str2,$arr); // 0,匹配失败 echo preg_match($reg,$str3,$arr); // 0,匹配失败 echo preg_match($reg,$str4,$arr); // 1,匹配成功 echo preg_match($reg,$str5,$arr); // 1,匹配成功 |
模式修正符是为正则表达式增强和补充的一个功能,使用时把模式修正符放在整个正则表达式的后面。
模式修正符 | 说明 | 实例 |
---|---|---|
i | 正则内容在匹配的时候不区分大小写 | 实例 |
$reg1="#google#"; $reg2="#google#i"; $str1="google"; $str2="GOOGLE"; echo preg_match($reg1,$str1,$arr); // 1,匹配成功 echo preg_match($reg1,$str2,$arr); // 0,匹配失败 echo preg_match($reg2,$str1,$arr); // 1,匹配成功 echo preg_match($reg2,$str2,$arr); // 1,匹配成功 |
||
m | 匹配首内容或者尾内容时 采用多行识别匹配 | 实例 |
$reg1="#.com$#"; $reg2="#.com$#m"; $str1="google.com\nbaidu.com"; // \n 是一个换行,将一行字符串变成两行 echo preg_match_all($reg1,$str1,$arr1); // 1,匹配到 1 个 echo preg_match_all($reg2,$str1,$arr2); // 2,匹配到 2 个 |
||
s | 将字符串中的回车转义字符取消,进行单行匹配 | 实例 |
$reg1="#2013(.*)coming#"; $reg2="#2013(.*)coming#s"; $str="2013 pass \n 2014 coming"; echo preg_match_all($reg1,$str,$arr1); // 0,匹配失败 echo preg_match_all($reg2,$str,$arr2); // 1,匹配成功 |
||
x | 忽略正则中的空白 | 实例 |
$reg1="#2000(.*)01\\1 01#"; $reg2="#2000(.*)01\\1 01#x"; $str="2000-01-01"; echo preg_match($reg1,$str,$arr1); // 0,匹配失败 echo preg_match($reg2,$str,$arr2); // 1,匹配成功 |
||
e | 在执行正则替换函数的时候,使其他函数先运算后替换 | 实例 |
$regex=array("#website#","#website#e","#\n#"); $replc=array("'www.baidu.com ( MD5:'.md5(\"www.baidu.com\").' )'" ,"'www.google.com ( MD5:'.md5(\"www.google.com\").' )'" ,"<br>;"); $str="web1:website\nweb2:website"; echo preg_replace($regex,$replc,$str,1,$count); echo $count; // web1:'www.baidu.com ( MD5:'.md5("www.baidu.com").' )' // web2:www.google.com ( MD5:0a137b375cc3881a70e186ce2172c8d1 ) // 3,因为数组有三部分,每部分替换一次,替换三次 |
||
A | 强制 ^ 匹配从头开始匹配 | 实例 |
$reg="#^www#mA"; $str1="map_baidu_com\nwww_google_com"; $str2=" www_baidu_com\nwww_google_com"; $str3="www_baidu_com\nwww_google_com"; echo preg_match_all($reg,$str1,$arr1); // 0,www 必须在第一行,第二行不行 echo preg_match_all($reg,$str2,$arr2); // 0,www 前面不能有 空格、回车、换行 等 echo preg_match_all($reg,$str3,$arr3); // 1,完全复合正则要求 |
||
D | 强制 $ 匹配尾部无任何空白不显示字符内容 | 实例 |
$reg="#baidu$#D"; // 要求匹配内容最后不能有 空格、回车、换行 等 $str1="baidu"; $str2="baidu "; $str3="baidu\n"; $str4="baidu\r"; $str5="baidu\t"; echo preg_match($reg,$str1,$arr1); // 1,匹配成功 echo preg_match($reg,$str2,$arr2); // 0,匹配失败 echo preg_match($reg,$str3,$arr3); // 0,匹配失败 echo preg_match($reg,$str4,$arr4); // 0,匹配失败 echo preg_match($reg,$str5,$arr5); // 0,匹配失败 |
||
U | 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束 | 实例 |
$reg1="#<(.*)>#"; $reg2="#<(.*)>#U"; $str="<b>web tag</b>"; echo preg_match($reg1,$str,$arr1); // 1,匹配内容:<b>web tag</b> echo preg_match($reg2,$str,$arr2); // 1,匹配内容:<b> |
[ 后天堂向上 | 好好学习天天向上 ]