《PHP编程:PHP之正则表达式捕获组与非捕获组(详解)》要点:
本文介绍了PHP编程:PHP之正则表达式捕获组与非捕获组(详解),希望对您有用。如果有疑问,可以联系我们。
在项目开发过程中正则表示经常会用到,可以说会正则表达式是每个程序员最基本的要求,初学者在刚接触正则表达式都感到很吃力.最近看到一位朋友的博客写的《PHP正则表达式》获益颇多,在章节对通配符以及捕获数据非常感兴趣.这两章节刚好也涉及到了正则表达式的捕获组和非捕获组的内容,以此来分析这方面的内容PHP教程
我们知道,在正则表达式下(x) 表示匹配'x'并记录匹配的值.这只是比拟通俗的说法,甚至说这是不严谨的说法,只有()捕获组形式才会记录匹配的值.非捕获组则只匹配,不记录.PHP教程
捕获组:PHP教程
(pattern)PHP教程
这种形式是我们见到最多的一种形式,匹配并返回捕获结果,可以嵌套,组号顺序从左到右依次排列‘.PHP教程
这种方式虽然看起来在构造正则表达式的时候略微复杂一点,但实质上与(pattern)一样.最大的优势体现在对结果处理上,程序员可以直接根据本身设置的<name>直接快速调用结果,而不用再去数需要的结果在第几个子组了.PHP教程
num是一个整数,是对捕获组的反向引用. 例如\2表示第二个子组匹配值,\表示第一个子组匹配值PHP教程
匹配结果:PHP教程
\k< name >PHP教程
了解了(?P<name>pattern)与\num,这个就不难理解了.\k< name >是对命名捕获组的反向引用.其中 name 是捕获组名.PHP教程
匹配结果:PHP教程
非捕获组:PHP教程
(?:pattern)PHP教程
与(pattern)的唯一区别是,匹配pattern但不捕获匹配结果.这里便不再举例.PHP教程
还有四种方式实际上讲的是一个事情:预查.PHP教程
预查分为正向预查与反向预查.根据字面理解,正向预查是判断匹配字符串后面某些字符存在与否,而反向预查则是判断匹配字符串前面某些字符存在与否.PHP教程
正向预查判断存在使用(?=pattern),判断不存在使用(?!pattern).PHP教程
反向预查判断存在使用(?<=pattern),判断不存在使用(?<!pattern).PHP教程
匹配结果:PHP教程
另外,预查的四种形式是零宽度的,匹配的时候只做一个判断,自己是不占位置的./HE(?=L)LLO/ 与HELLO匹配,而/HE(?=L)LO/与HELLO是不匹配的.毕竟但从字节数上两者就是不匹配的,前者只有4个,而后者有5个.PHP教程
以上便是PHP之正则表达式捕获组与非捕获组详解的全部内容,希望对大家有所启迪.PHP教程
欢迎参与《PHP编程:PHP之正则表达式捕获组与非捕获组(详解)》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/8991.html