我在制作以下代码以输出我所期望的内容时遇到了一些麻烦:
<?php
$a='##foobar(a b, c d)@@f()</td>a</td>';
echo preg_replace('/foobar.*?')(.*)'<'/td'>$/', 'blah(this)$1', $a);
预期的结果应该是##blah(this)@@f()</td>a
,但是它的输出是##blah(this)@@f()a
(使用phptester)。
对我来说,它如何输出最后一个a
而不是前一个</td>
标签是没有意义的。我只想删除最后一个</td>
标记。
在我的正则表达式中,我正在进行贪婪匹配(.*)
,但我也尝试过使用(.*?)
,它输出相同的结果。
我在逃避每一个特殊的角色。特殊的正则表达式字符为:. ' + * ? [ ^ ] $ ( ) { } = ! < > | : -
。
您的正则表达式正常,问题是浏览器没有呈现结束标记。试试这个:
<?php
$a = '##foobar(a b, c d)@@f()</td>a</td>';
$b = preg_replace('/foobar.*?')(.*)'<'/td'>$/', 'blah(this)$1', $a);
echo htmlentities($b);
您可以在交互式模式下使用PHP,而不是使用phptester
,命令行为:
php -a
然后在一个交互式shell中输入,非常类似于python。
使用该工具测试您的代码,我们可以看到您的正则表达式是可以的。
$ php -a
Interactive shell
php > $a='##foobar(a b, c d)@@f()</td>a</td>';
php > echo preg_replace('/foobar.*?')(.*)'<'/td'>$/', 'blah(this)$1', $a);
##blah(this)@@f()</td>a
php >