gpt4 book ai didi

php - 是否可以在正则表达式中对两个单独的环视/零宽度断言(即后视/后视)进行 AND 运算?

转载 作者:行者123 更新时间:2023-12-02 22:03:31 25 4
gpt4 key购买 nike

我正在使用 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 以便两个否定的后视断言都必须为真。 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 - 是否可以在正则表达式中对两个单独的环视/零宽度断言(即后视/后视)进行 AND 运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com