PHP preg_replace regex以删除最后一个标记


PHP preg_replace regex to remove last tag

我在制作以下代码以输出我所期望的内容时遇到了一些麻烦:

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