非贪婪匹配:使用?
修饰符可以将匹配模式设置为非贪婪模式,即尽可能少地匹配。例如,/a.*?b/
会匹配最短的以a
开始以b
结束的字符串。
分组和引用:可以使用括号将匹配模式分组,并使用反向引用来引用这些分组。例如,/(foo|bar)\1/
会匹配foofoo
或barbar
。
后向引用:可以使用\数字
来引用先前匹配的子模式。例如,/(abc)\1/
会匹配abcabc
。
断言:可以使用断言来匹配字符串的位置而不消耗字符。例如,/foo(?=bar)/
会匹配foo
后面跟着bar
的字符串,但不会匹配foo
后面没有跟着bar
的字符串。
递归匹配:可以使用(?R)
来实现递归匹配,即在正则表达式中引用自身。这在处理嵌套结构的文本时非常有用。
命名捕获组:可以给捕获组命名,以便在后续引用中使用。例如,/(?<name>foo)bar\k<name>/
会匹配foo
后面跟着bar
并且再次出现foo
的字符串。
Unicode支持:PHP正则表达式引擎添加了对Unicode字符的支持,可以使用\p{}
或\P{}
来匹配或排除特定的Unicode字符类别。