2

我不止一次被一个错误所困扰,您不小心在条件语句中分配了一个变量,例如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]*\)但如果在示例底部想出一些适用于扩展版本的东西会很好。

关于更好的表达方式的任何想法?

4

2 回答 2

4

正则表达式不是解析代码的最佳工具。

对于大多数语言,都有检查代码的 linting 工具。我没有使用 PHP 的经验,但您会在这里找到很多建议:是否有用于 PHP 文件的静态代码分析器 [如 Lint]?

于 2012-12-09T22:36:51.483 回答
3

首先,假设您没有这样的情况(C 示例):

if ((a = b) == c)

因为理解这些情况需要一个实际的解析器。

现在,简单地说,你想匹配=但不匹配==\+。所以:

if\([^=]\|==\+\)*[^=]=[^=]\([^=]\|==\+\)*$

它说的是什么:

  • if: 匹配第一个 if。
  • [^=]: 任何字符,但=
  • ==\+:=====
  • \([^=]\|==\+\)*: 任何不是=或是==或的东西===。这包括所有的空格、开头(、结尾)等。这在 isolated 之前和之后都有=
  • [^=]=[^=]: 孤立=的。
于 2012-12-09T22:53:42.937 回答