RegEx-排除注释的PHP代码块

时间:2018-07-29 08:26:27

标签: php regex search

我在正则表达式内容搜索中使用文件搜索实用程序(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块中的所有内容:\* *\,而不是也提取其中的结果?

编辑: 仅供参考,here is an example与此相反,即。仅匹配注释的代码。

1 个答案:

答案 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单行模式。

Another demo at regex101


或者不带任何标志,并使用[^\n]而非\N进行兼容性。

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

One more demo at regex101