将 PHP 结束标记转换为注释

2022-08-30 06:45:31

我的脚本中的一行在字符串中包含一个 PHP 结束标记。在正常操作下,这不会导致问题,但我需要注释掉该行。

我试图用 注释掉这行,但是它们都不起作用,解析器认为结束标记是实际的结束标记。///**/#

这是有问题的行:

$string = preg_replace('#<br\s*/?>(?:\s*<br\s*/?>)+#i', '<br />', $string);
//                              ^^             ^^

我该怎么做才能注释掉上面的行?


答案 1

使用技巧:将字符串从两部分连接起来。这样,结束标记被切成两半,不再是有效的结束标记。'?>' --> '?'.'>'

在代码中:

$string = preg_replace('#<br\s*/?'.'>(?:\s*<br\s*/?'.'>)+#i', '<br />', $string);

这将使评论工作。//

要使注释起作用,您还必须拆分序列:/* */*/

$string = preg_replace('#<br\s*'.'/?'.'>(?:\s*<br\s*'.'/?'.'>)+#i', '<br />', $string);

记住,有时候,即使整体大于其各部分的总和 - 但贪婪是不好的,有时候你最好少一些。:)


答案 2

最简单的方法

创建一个单独的变量来保存正则表达式;这样,您可以简单地注释掉语句:preg_replace()

$re = '#<br\s*/?>(?:\s*<br\s*/?>)+#i';
// $string = preg_replace($re, '<br />', $string);

使用字符类进行修复

要修复行注释,您可以通过放入字符类中来分解,如下所示:?>>

$string = preg_replace('#<br\s*/?[>](?:\s*<br\s*/?[>])+#i', '<br />', $string);
                                 ^ ^              ^ ^

要修复阻止注释,可以将其应用于 :/

$string = preg_replace('#<br\s*[/]?>(?:\s*<br\s*[/]?>)+#i', '<br />', $string);
                               ^ ^              ^ ^

要修复这两种注释样式,您可以将 放入它们自己的字符类中。/>

使用 /x 修饰符修复

修饰符 - aka - 忽略正则表达式中的空格和换行符(除非它们出现在字符类中);这样就可以添加空格来分隔有问题的字符。要修复这两种注释样式:xPCRE_EXTENDED

$string = preg_replace('#<br\s* /? >(?:\s*<br\s* /? >)+#ix', '<br />', $string);
                               ^  ^             ^  ^

推荐