PHP 中正则的应用 I Ⅱ Ⅲ

正则的重要作用:通过正则分割、匹配、查找、替换内容;

正则的几个基本点:元字符 ,重复,字符类,分支条件,分组,反义,反向引用,零向断言,负向零宽断言,贪婪,懒惰,平衡组,递归匹配等。

 

正则语法:

原子

a-z A-Z _ 0-9
(abc)(efg) 单元字符
[abcd][^abcd] 包括原子表,^代表排除或相反内容
\b [0-9] 包含所有数字
\B [^0-9] 除数字外的所有
\w 所有字母
\W 除字母外的所有字符
\s 包含空白、回车、换行
 
 

PREG_MATCH 和 EREG

int preg_match ( string $pattern(正则内容) , string $subject(正则语法) [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] (结果为数组))

<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>
preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。
preg_match_all()不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE
 
//模式分隔符后的"i"标记这是一个大小写不敏感的搜索
$mode="/\w/";
$str="adjsk66sdfszf";
echo "<hr>"; if(preg_match($mode,$str,$arr)){ echo"匹配成功".$arr[0]; }else{ echo"不成功";}

不使用贪婪时,只匹配第一个;

元字符

特殊 or 运算符号;

* 匹配前一个内容的0次或1次或多次

.匹配内容的0次或1次或多次,但不包括回车换行;

+ 一次或多次

?0次或1次

| 类似 "||" 或者 "or"; 前后任意一个匹配

^ 匹配字符串首部内容  ctrl符号,必须出现在匹配内容的首部

$ 匹配字符串尾部内容 类似上面

\b 匹配单词边界,边界可以是空格或特殊字符

\B  这两个在英文中会很好用,但是中文里不太好用;

b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置

{m}

{m,}

{m,n}

() 依次放入内存中,用 \1,\2获取;  举例:  $mode="/\d{2-4}}(.*)\d{1,2}\\1\d{1,2}/";   $str = "2016-10-17"  前面要什么,后面也用什么,因为是调用的,前面那个查出来后会存入内存。

 

正则运算顺序

左→右;

优先级() > * 、? 、+、{} > ^、$、\b > |

模式修正符

/正则/U

常用的修饰符:

i 不区分大小写;

m 在匹配首内容或尾内容时采用多行识别匹配; 增强 ^ 和 $ 的功能。

s 将回车取消,;

x 忽略正则中的空白;

A强制从头开始匹配;

D强制$匹配尾部无任何内容 \n

 

 

 

 

其他相关点:

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] );

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

在加工前的对象是subject,查询的条件是search,把匹配的内容,全部替换成replace的内容。

如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace()preg_replace()

search 和 replace可以是一一对应的数组,如 $search = array{a,b,c,d} ; $replace = array{1,2,3}; 这种情况里,replace数组内值的个数少于search,d 会被替换为空" ";

如果情况为 $search = array{a,b,c,d} ; $replace = "hehe"; 则abcd都会被"hehe"替换;

 

 

 

 
 
posted @ 2016-10-14 18:08  拾阶而上的PM  阅读(217)  评论(0)    收藏  举报
本博内容由王子豪 www.07byte.com 提供