我不小心被一个你不小心在条件语句中分配变量的错误咬了一次,比如if
。
我正在寻找这些事件的来源。我创建了一个在PHP中用于简单案例的表达式,但是想知道是否有人可以优化它或处理更有趣的案例。
样品:
if ($var = 3) //MATCH
if($var = 3) //MATCH
if($var=3) //MATCH
if ( $var = 3) //MATCH
if ($var == $var2)
if ($var = $var3) //MATCH
if ( $var === 7)
if( $var == 8 || $var = 9) //MATCH
if (($var == 7 ) && ($var ==10))
简单案例由if\s*\([\$a-zA-Z\d\s]*=[\$a-zA-Z\d\s]*\)
很好地处理,但是对于样本底部的扩展版本提供适用的东西会很好。
关于更好表达的任何想法?
答案 0 :(得分:4)
正则表达式不是解析代码的最佳工具。
对于大多数语言,都有用于检查代码的linting工具。我没有使用PHP的经验,但你会在这里找到很多指示:Is there a static code analyzer [like Lint] for PHP files?
答案 1 :(得分:3)
首先,我们假设您没有这样的案例(C示例):
if ((a = b) == c)
因为了解这些情况需要一个实际的解析器。
现在,简单地说,您希望匹配=
而不是==\+
。因此:
if\([^=]\|==\+\)*[^=]=[^=]\([^=]\|==\+\)*$
它说的是什么:
if
:匹配第一个if。[^=]
:除=
==\+
:==
和===
\([^=]\|==\+\)*
:任何非=
或==
或===
的内容。这包括所有空格,开头(
,结尾)
等。这是在孤立的=
之前和之后。[^=]=[^=]
:已隔离=
。