我使用 Perl 来解决这个正则表达式问题,但最好知道它是否也适用于 PHP。
我需要注释掉 PHP 文件中的所有 print 语句或所有以 print 开头的内容。它看起来像这样:
<?php
// Description of file
...
print("Foobar");
// print("Foo");
//print("bar");
// Open and print file
function printtemplate($file) {
...
}
...
printtemplate($file);
...
?>
首先,我制定了一个如下的正则表达式:
((?<!function )|(?<!//))print
这显然不起作用,因为 |
是一个 OR。我正在寻找一个“与”,以便两个否定的后向断言都必须为真。 AND 结构是否以某种形式存在于正则表达式中,或者是否有办法模拟它?
最终,在应用正则表达式后,我希望 php 文件如下所示:
<?php
// Description of file
...
//print("Foobar");
// print("Foo");
//print("bar");
// Open and print file
function printtemplate($file) {
...
}
...
//printtemplate($file);
...
?>
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
只需将它们放在一起即可。就是这样。它将创建“AND”效果,因为您需要先通过两个环视,然后才能匹配它们之后的任何内容。
就您而言,它将是:
(?<!function )(?<!//)print
但是,请注意,上面的正则表达式将返回误报,这会导致添加不必要的注释。 Demo .
对于 PCRE(在 PHP 中使用),后视断言要求模式严格固定长度,因此不可能使用后视断言在所有情况下检查是否print
被注释掉或不排除它。 @mpapec 的答案提供了一种适用于编写良好的代码的解决方案,并且比具有后向功能的正则表达式具有更好的覆盖范围。
关于php - 是否可以在正则表达式中对两个单独的环视/零宽度断言(即lookbehind/look-behind)进行“与”操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499782/