位置:首页  >   程序积累  > php正则相关知识点笔记

php正则相关知识点笔记


正则 环视(零宽断言)

环视不匹配任何字符,只匹配文本中的特定位置。类似于\b,^,$那样。环视不会占用字符。

环视分为顺序和逆序两种。

顺序
(?=exp)位置的后面能匹配exp。例如(?=\d)当前位置右边是数字
(?!exp)位置的后面不能匹配exp。例如(?!\d)当前位置右边不是数字

逆序
(?<=exp)位置的前面能匹配exp。例如(?<=\d)当前位置左边是数字
(?<!exp)位置的前面不能匹配exp。例如(?<!\d)当前位置左边不是数字


(?=jeffrey)jeff 等价于  jeff(?rey)

例子
<?php
$string = '5345678986';
$pattern = '/(?!=\d)(?=(\d{3})+$)/';
$replacement  = ',';
echo  preg_replace($pattern, $replacement, $string);//5,345,678,986


贪婪与懒惰
贪婪 通常的行为是匹配尽可能多的字符
a.*b -- aabab -- 会匹配 aabab
懒惰 只要在后面加上一个问号?。这样.*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.*?b --- aabab  --  会匹配 aab和 ab


正则的引擎
是否支持忽略优先量词和分组捕获
支持的话是 NFA
不支持的话是 DFA

DFA文本主导   //  awk,egrep,flex,lex,msyql,procmail
NFA表达式主导 //  gnu,emacs,java,ergp,less,more,.net,perl,php,python,ruby,sed,vi



php pcre的主要函数

preg_grep    --------------  返回匹配模式的数组条目
preg_match --------------   执行一个正则表达式匹配
preg_match_all -------------- 执行一个全局正则表达式匹配
preg_filter --------------  执行一个正则表达式搜索和替换
preg_replace --------------   执行一个正则表达式的搜索和替换
preg_replace_callback --------------执行搜索并且使用一个回调进行替换
preg_split-------------- 通过一个正则表达式分隔字符串
preg_quote -------------- 转义正则表达式字符
preg_last_error-------------- 返回最后一个pcre正则执行产生的错误代码


文章属性
精彩评论