正则表达式中的特殊符号
如:
preg_match('/.+?hxx/is', hxx));
返回,0,表示没有匹配,这是因为 .+?的作用,具体讲一下。
.的作用
作用:匹配除换行符(\n)以外的任意单个字符。修饰符影响:当使用s修饰符(单行模式)时,.也能匹配换行符。
如:
preg_match('/a.b/', acb));
有.时:可以匹配像aab、acb、a b这样的字符串,因为.可以匹配任意字符(除了换行符,除非使用s修饰符)。无.时(例如/ab/):只能匹配ab,不能匹配中间有其他字符的情况。
+的作用
作用:匹配前面的子表达式一次或多次(贪婪模式,尽可能多地匹配)。组合使用:当与?组合成+?时,表示非贪婪模式(尽可能少地匹配)。
如:
preg_match('/a+/', aaa));
有+时:可以匹配一个或多个连续的a,如a、aa、aaa等。无+时(例如/a/):只能匹配单个a,不能匹配多个。
?的作用
作用:
单独使用时:匹配前面的子表达式零次或一次(即前面的内容是可选的)。紧跟在量词(如*、+、?、{n}等)后面时:将贪婪模式转换为非贪婪模式(最小匹配)。
情况1:单独使用
如:
preg_match('/a?b/', ab));
有?时:可以匹配b(因为a出现0次)或ab(a出现1次),但不能匹配aab。无?时(例如/ab/):只能匹配ab,不能匹配b。
情况2:作为非贪婪修饰符(与量词组合)
如:
preg_match('/a+?b/', aab));
有?(非贪婪模式)时:在字符串aaab中,会匹配aab(因为+?会尽可能少地匹配,只匹配一个a,然后遇到b就停止)。无?(贪婪模式)时:在字符串aaab中,会匹配整个aaab(因为+会尽可能多地匹配)。
*的作用
有\*: 允许前面的元素出现0次或多次。即该元素可以没有,也可以重复多次。无\*: 前面的元素必须恰好出现一次(如果没有其他量词修饰的话)。
如:
preg_match('/ab*c/', 'ac'); // 匹配 "ac"(b出现0次)
// 匹配 "abc"
// 匹配 "abbbbc"
^的作用
作用:
匹配字符串的开始位置在多行模式(m 修饰符)下也匹配每行的开头
如:
preg_match('/^abc/', 'abc'); //匹配 "abc123"
//不匹配 "123abc"
$的作用
作用
匹配字符串的结束位置在多行模式(m 修饰符)下也匹配每行的结尾
如:
preg_match('/abc$/', 'abc'); //不匹配 "abc123"
//匹配 "123abc"
综合对比表
元字符示例表达式匹配行为示例输入匹配结果./a.b/匹配任意单个字符(除换行符)aXb匹配aXb无./ab/只能匹配字面abaXb不匹配+/a+/匹配1个或多个aaaa匹配整个aaa无+/a/只能匹配单个aaaa只匹配第一个a?(单独)/a?b/a出现0次或1次b匹配b无?/ab/只能匹配abb不匹配+?/a+?b/非贪婪匹配:尽可能少地匹配aaaab匹配aab(从第二个a开始)+(无?)/a+b/贪婪匹配:尽可能多地匹配aaaab匹配整个aa^/^a/匹配出现在开头的aa匹配到了开头的 a总结
就是最近经常遇到一些这类的 特殊符号,搞不懂什么意思,网上也没有很全面的教程,就问al,自己总结了一下。
最后,如何你觉的该文章对你有帮助,记得点赞+收藏吧!