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

PHP正则反向引用求解?
使用php反向捕获又不知道怎么回事了。

把下面字符串里面的4个连续的数外面的符号去掉。

fsdfsdafasfasdfsdf<{2365}>

,还请分析下我写的哪里有问题?

<?php
header("Content-type:text/html;charset=utf-8");
$str="fsdfsdafasfasdfsdf<{2365}>";
$mypreg="/<{(\d\d\d\d)}>/";//()里面表示4个连续的数,使用括号表示我捕获这个子表达式,一会引用
$mycon="\1"; //这个是替换内容,我反向引用上面的4个数字2365,用这4个数字替换上面有外符号的整块<{2365}>
echo $str;
echo "<br/>";
$str=preg_replace($mypreg,$mycon,$str);
echo $str;


结果是能够捕获到<{2365}> 这个东东,但是反向引用怎么都没有内容,应该是反向引用错了,没有引用到内容。求指点。

------解决方案--------------------
是不是没有指定子表达式的组名啊
要指定一个子表达式的组名,使用这样的语法:(?<Word>\w+)
word就是表达式的组名
放到后面引用的语法\k<Word>

我也是新学的 理解也不深
------解决方案--------------------
$mycon="\\1"; 
或者
$mycon='\1';

都可以