gpt4 book ai didi

php - RegEx - 排除注释的 PHP 代码块

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:19 27 4
gpt4 key购买 nike

我正在使用具有正则表达式内容搜索功能的文件搜索实用程序 (FileSeek)。我正在搜索的内容基本上是任何未注释的行,其中包含 while...each 。我已经成功地排除了内联注释行,例如 //while (list($key, $value) = each($_GET)) 使用此正则表达式:^(?:(? !\/\/).)*while.+[\s=(]each[\s(]

Demo

如何改进正则表达式搜索(使其更具限制性)以从注释行 注释代码块 \* *\ 中排除搜索结果,例如:

/*
while (list($key, $value) = each($_GET))
*/

或者

/* some code
while (list($key, $value) = each($_GET))
some code
*/

换句话说,我如何修改我的正则表达式以完全跳过/忽略注释 php block 内的所有内容:\* *\ 而不是获取也在其中的结果?

编辑:仅供引用,here is an example恰恰相反,即。仅匹配注释代码。

最佳答案

您可以使用 (*SKIP)(*FAIL)this trick 一起跳过部分如果您的工具支持。

(?:(?<!:)\/\/.*|\/\*[\s\S]*?\*\/)(*SKIP)(*F)|while.+?[\s=(]each[\s(]

See demo at regex101 .这只是一个快速尝试,您需要根据需要调整模式。


如果您的工具不支持,您可以尝试向您的模式添加另一个前瞻。

^(?:(?!\/\/).)*while.+[\s=(]each[\s(](?!(?:(?!\/\*)[\S\s])*?\*\/)

打开 m 多行模式并关闭 s 单行模式。

Another demo at regex101


或者不使用任何标志并使用 [^\n] 而不是 \N 以实现兼容性。

(?<![^\n])(?:(?!\/\/)[^\r\n])*?while[^\r\n]+[\s=(]each[\s(](?!(?:(?!\/\*)[\S\s])*?\*\/)

One more demo at regex101

关于php - RegEx - 排除注释的 PHP 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51578558/

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