加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_韶关站长网 (https://www.0751zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP之正则表达式捕获组与非捕获组(详解)

发布时间:2022-10-04 11:32:30 所属栏目:PHP教程 来源:
导读:  在项目开发过程中正则表示经常会用到,可以说会正则表达式是每个程序员最基本的要求php正则教程,初学者在刚接触正则表达式都感到很吃力。最近看到一位朋友的博客写的《PHP正则表达式》获益颇多,在章节对通配符
  在项目开发过程中正则表示经常会用到,可以说会正则表达式是每个程序员最基本的要求php正则教程,初学者在刚接触正则表达式都感到很吃力。最近看到一位朋友的博客写的《PHP正则表达式》获益颇多,在章节对通配符以及捕获数据非常感兴趣。这两章节刚好也涉及到了正则表达式的捕获组和非捕获组的内容,以此来分析这方面的内容
 
  我们知道php正则教程,在正则表达式下(x) 表示匹配'x'并记录匹配的值。这只是比较通俗的说法,甚至说这是不严谨的说法,只有()捕获组形式才会记录匹配的值。非捕获组则只匹配,不记录。
 
  捕获组:
 
  (pattern)
 
  这种形式是我们见到最多的一种形式,匹配并返回捕获结果,可以嵌套,组号顺序从左到右依次排列‘。
 
  复制代码 代码如下:
 
  $regex = '/(ab(c)+)+d(e)"codetitle">复制代码 代码如下:
 
  Array ( [0] => abccde [1] => abcc [2] => c [3] => e )
 
  ("codetitle">复制代码 代码如下:
 
  $regex = '/("codetitle">复制代码 代码如下:
 
  Array ( [0] => fsabcd45 [group1] => fs [1] => fs [group2] => s [2] => s [group3] => d [3] => d )
 
  \num
 
  num是一个整数,是对捕获组的反向引用。 例如\2表示第二个子组匹配值,\表示第一个子组匹配值
 
  复制代码 代码如下:
 
  $regex = '/(\w)(\w)\2\1/';
 
  $str = 'abba';
 
  $matches = array();
 
  if(preg_match($regex, $str, $matches)){
 
  print_r($matches);
 
  }
 
  匹配结果:
 
  复制代码 代码如下:
 
  Array ( [0] => abba [1] => a [2] => b )
 
  注意,这里我疏忽了一个小细节,一开始我第一样代码是 $regex = “/(\w)(\w)\2\1/”; 结果返回无匹配结果,经过调试后,发现这里只能用' '。'与" 用法差别大家还是需要注意下。
 
  \k< name >
 
  了解了("codetitle">复制代码 代码如下:
 
  $regex='/("fabcf";
 
  echo preg_match_all($regex, $str,$matches);
 
  print_r($matches);
 
  匹配结果:
 
  复制代码 代码如下:
 
  Array ( [0] => Array ( [0] => fabcf ) [name] => Array ( [0] => f ) [1] => Array ( [0] => f ) )
 
  非捕获组:
 
  ("codetitle">复制代码 代码如下:
 
  $regx='/("abcd ebcd abce ebca";
 
  if(preg_match_all($regx, $str, $matches)){
 
  print_r($matches);
 
  }
 
  匹配结果:
 
  复制代码 代码如下:
 
  Array ( [0] => Array ( [0] => bc) )
 
  这四种形式使用的是否只要注意好相对匹配字符串的位置和断言肯定还是否定,就会很快掌握。
 
  另外,预查的四种形式是零宽度的,匹配的时候只做一个判断,本身是不占位置的。/HE(?=L)LLO/ 与HELLO匹配,而/HE(?=L)LO/与HELLO是不匹配的。毕竟但从字节数上两者就是不匹配的,前者只有4个,而后者有5个。
 
  以上就是PHP之正则表达式捕获组与非捕获组详解的全部内容,希望对大家有所启迪。
 

(编辑:云计算网_韶关站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!