日期:2014-05-17  浏览次数:20433 次

php中的正则反向引用求解?
本帖最后由 u010572351 于 2013-06-06 17:46:46 编辑
是这样的,使用正则将匹配的连续4个数字加上一个括号,数字不变。

老师说的是反向捕获,好像使用的是{1},我试了下不行,然后网上说的是\1,有反应但是不对,然后我自己改了个下面写的\0,就反向捕获到了,但是网上查了下,好像没这样写的,,,,,但是我的确捕获到了4个数字,是怎么回事???  还有,数组式正则的什么意思?

$a="abcd1234reo5678";

//下面我们使用php中的正则表达式来处理上面的内容

$myreg=array(
"/(\d){4}/i"
);

$con=array(
'[\0]' // 捕获到数字,不改他,直接加上一个中括号,我自己弄出来的写法,囧
);


------解决方案--------------------
<?php 
$s='wqe2313jyu6y6546iuoi';
$s=preg_replace('/(\d{4})/','{${1}}',$s);
print($s);
?>

运行结果:
wqe{2313}jyu6y{6546}iuoi

------解决方案--------------------
/(\d{4})/
[$1] 

反向引用的数字表示正则式从左向右数第几对圆括号内的内容,注意(?...)不计算在内

当有歧义时才需要使用{}
例如反向引用后面要补一个数字就会产生歧义,要写成${1}1——表示反向引用第一对括号内容,后面加数字1
但$11则是反向引用第十一对括号的内容(如果没有那么多括号就为空)

------解决方案--------------------
/((?:123)456(789))/
$1得到123456789
$2得到789