我在正则表达式内容搜索中使用文件搜索实用程序(FileSeek)。
我要搜索的内容基本上是其中包含while...each
的所有未注释行。
我已成功使用此正则表达式排除了内嵌注释行,例如// while (list($key, $value) = each($_GET))
:^(?:(?!\/\/).)*while.+[\s=(]each[\s(]
如何改善正则表达式搜索(使其更具限制性),以从注释行和注释代码块\* *\
中排除搜索结果,例如:
/*
while (list($key, $value) = each($_GET))
*/
或
/* some code
while (list($key, $value) = each($_GET))
some code
*/
换句话说,我该如何修改我的正则表达式,使其也完全跳过/忽略已注释的php块中的所有内容:\* *\
,而不是也提取其中的结果?
编辑: 仅供参考,here is an example与此相反,即。仅匹配注释的代码。
答案 0 :(得分:2)
如果工具支持,您可以使用(*SKIP)(*FAIL)
与this trick一起跳过部分。
(?:(?<!:)\/\/.*|\/\*[\s\S]*?\*\/)(*SKIP)(*F)|while.+?[\s=(]each[\s(]
See demo at regex101。这只是一个快速尝试,您需要根据需要调整模式。
如果您的工具不支持此功能,则可以尝试在图案中添加另一个前瞻。
^(?:(?!\/\/).)*while.+[\s=(]each[\s(](?!(?:(?!\/\*)[\S\s])*?\*\/)
打开m
多行模式,关闭s
单行模式。
或者不带任何标志,并使用[^\n]
而非\N
进行兼容性。
(?<![^\n])(?:(?!\/\/)[^\r\n])*?while[^\r\n]+[\s=(]each[\s(](?!(?:(?!\/\*)[\S\s])*?\*\/)