正则表达式匹配包含赋值运算符的if语句

时间:2018-07-25 15:35:50

标签: php regex match variable-assignment operator-keyword

我的要求是匹配所有错误地包含赋值运算符而不是相等运算符(==)的if语句。

我确定我的正则表达式缺少很多东西,但是我注意到的第一个问题是我无法包含正则表达式以在if语句关闭后停止搜索,例如'){'。

if(.*?)(\w+)\s*=\s*(\w+)\)

注意:包含> =或!=的行不得匹配

2 个答案:

答案 0 :(得分:1)

只需五美分:

if(\s)*(\(){1}(.)+[^!=<>](=){1,1}?[^=]

此表达式与有效的逻辑运算符“!=”“ <=”“> =”不匹配。

答案 1 :(得分:0)

尝试一下

if\s*\([^{]*\s*\w+\s*=\s*\w+\s*[^{]*\)

如何制作: Working 您想在if语句的括号内标识类似num=3之类的内容。您可以使用if\(\w+=\w+\)进行此操作。但是,这有一个小问题。如果出现空白,它将失败。因此,它将无法识别num = 3apples = 8

为了确保正则表达式在出现空格时不会失败,我们将其修改为:if\s*\(\s*\w+\s*=\s*\w+\s*\)。现在,它甚至可以在空白处工作。那很好;但是仍然有一个小问题需要解决(就像您在评论中提到的那样)。如果我们有一个if ( apples==3 and mangoes=5 or oranges==4 )这样的if语句怎么办? 好吧,我们的正则表达式会失败

要解决此问题,请将您的正则表达式修改为if\s*\([^{]*\s*\w+\s*=\s*\w+\s*[^{]*\)。我只在我们的正则表达式中添加了[^{]*。它告诉正则表达式引擎,{前后可以有任意数量的字符(\s*\w+\s*=\s*\w+\s*除外)。

就是这样。您有一个简单的正则表达式,可匹配所有错误地包含赋值运算符而不是相等运算符的if语句。