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 ?>
View Code

 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 ?>
View Code

 

posted @ 2016-01-07 11:28  sky钦  阅读(70)  评论(0)    收藏  举报