标签:元素 dump class 注释 位置 特定 unicode编码 pcr posix
完整的正则表达式由两种字符组成 特殊字符(元字符)和普通字符(文本)
示例:
/^\d+hello.*/
\d + . * 都是元字符
hello是普通字符
. 除了换行以外的任意字符
[abcde] 匹配abcde里面的任意字符
[^abcde] 不匹配abcde里面的任意字符
[a-h] 匹配a-h的任意字符
\w相当于[a-zA-Z0-9_]
\W相当于[^a-zA-Z0-9_]
\s匹配任何空白字符[ \f\n\r\t\v]
\S匹配任意非空白字符[^\s]
\d匹配数字
\D不匹配数字
[\u4e00-\u9fa5]匹配任意汉字(这里用unicode编码表示汉字)
*匹配0-多个字符
?匹配0-1个元字符
{0,}0-多个元素
{0,1}0-1个字符
{n}匹配n个字符
{n,}匹配至少N个字符
+至少匹配一个
\b匹配单词边界
^匹配行首
$匹配行尾
1)特殊字符转义:\,?,",比如至少一个\,正则表达式匹配应为\\+
2)可以将元字符或普通字符括起来作为分组
如何判定哪些是元字符?
元字符转义测试
不匹配任何字符,只匹配特定的位置,类似于\b,^,$。环视不会占用字符
环视分为顺序和逆序两种
顺序(?=exp)位置的后面能匹配exp,(?!exp)位置的后面能不匹配exp
逆序(?<=exp)位置的前面能匹配的exp,例如(?<=\d)当前位置的左边是数字
(?<!exp)位置的前面不能匹配的exp,例如(?<!\d)当前位置的左边不能匹配数字
<?php $string = ‘aaabaab‘; $pattern1 = ‘/a.{1,10}b/‘; $pattern2 = ‘/a.{1,10}?b/‘; preg_match_all($pattern1,$string,$arr1); preg_match_all($pattern2,$string,$arr2); var_dump($arr1); var_dump($arr2);
1.正则引擎的了解
2.回溯
3.表达式的优化
1)化简量词
2)尽量不使用分组
3)尽量不使用或a|b|c不如[abc]的效率
4)回溯的越少,速度越快
1)i 大小写不敏感
2)m 增强的行锚点模式
3)x 空白和#注释将被忽略
4)s 点号元字符匹配所有字符,包含换行符
5)e 将替换后的字符串作为PHP 代码评估执行
PHP中的pcre库和posix库的对比
pcre的正则分隔符可以是任意的
标签:元素 dump class 注释 位置 特定 unicode编码 pcr posix
原文地址:https://www.cnblogs.com/bafeiyu/p/8875217.html