正则表达式lookbehind跳过多行注释

时间:2016-06-08 07:21:04

标签: php regex regex-lookarounds

我需要将应用程序从PHP 4转换为PHP 7应用程序。特别是我必须解决这个问题,即来自HTML表单的变量没有在POST或REQUEST捕获的目标页面中明确定义。我会手动完成,但首先我需要找到它们。

为此,我想编写一个正则表达式,检查先前是否在页面中定义了PHP变量。我设法用反向引用和无限制的lookbehind(一些语言允许它)来做,但我无法管理多行注释/.../。我需要在后面的搜索中跳过它们。 我能够跳过行类型注释// ...并且注释注释的内容但不要超越它完全跳过:在/../之前的变量声明与正则表达式不匹配

我使用PowerGrep 4作为正则表达式引擎。

这里是我的不完整的正则表达式,它使用反向引用和嵌套的lookbehinds:

(?<!(?<!//.*)\1[\s]*\=[\s]*.*;[^\*]*[^/]*)(\$\b(?:[^\_])[a-zA-Z-_\d]+\b)(?![\s]*[\=]{1}[^\=])

示例:给出代码:

blabla $var  /*  blabla /  *  $var = 2 * / blabla */   $var

它应该在注释之前和之后两次匹配$ var,忽略注释中的定义。

还要考虑以下事项:

blabla $var  blabla  $var = 2  /*  blabla /  *  $var  * / blabla */   $var

应该只匹配第一个$ var,因为只有第一次出现的$ var没有变量定义。

目前我可以创建一个正则表达式,即使它在多行注释(WRONG)中也可以返回检查赋值匹配,或者忽略注释中的赋值但是在多行注释再次出错之前无法检测到任何赋值。

我无法找到同时获得上述行为的方法。

有没有人对我的问题有解决方案或其他想法?

0 个答案:

没有答案