PHP正则表达式二
正则表达式的反向引用:
php正则表达式的反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字符串或字母,简单来说就是使用前面括号包起来的捕获。
1.使用数字表示捕获分组:
例如:匹配两个一样的单词,可以写成 ([a-zA-Z]+)\1
前面的[a-zA-Z]+是若干个字母组成的单词,括号括起来就是一个捕获,\1是指整个正则表达式的第一个捕获,也就是刚才匹配好的单词,这样就可以实现匹配两个相同的单词。
有多个分组时,从左到右依次用\1 \2 \3...引用即可。
举例代码1:
preg_replace(pattern, replacement, subject)中的参数2使用捕获时,可以用$1或\1的形式。
1 <?php 2 $pattern = '/([a-z])([A-Z])\1\2/i'; 3 $subject = 'aBaB'; 4 $data1 = preg_replace($pattern, "$1", $subject); 5 $data2 = preg_replace($pattern, "\\2", $subject); 6 echo $data1; //输出a 7 echo "<br/>"; 8 echo $data2; //输出B 9 ?>
2.指定分组名称:
指定分组名称的语法如下:
(?P<subname>...) 其中...表示正则表达式。
如果要反向引用该分组,语法格式如下:
(?P=subname)
上面代码1也可以写成如下形式:
1 <?php 2 $pattern = '/(?P<fir>[a-z])(?P<sec>[A-Z])(?P=fir)(?P=sec)/i'; 3 $subject = 'aBaB'; 4 $data1 = preg_replace($pattern, "$1", $subject); 5 $data2 = preg_replace($pattern, "\\2", $subject); 6 echo $data1; //输出a 7 echo "<br/>"; 8 echo $data2; //输出B 9 ?>

浙公网安备 33010602011771号