我的要求是匹配所有错误地包含赋值运算符而不是相等运算符(==)的if语句。
我确定我的正则表达式缺少很多东西,但是我注意到的第一个问题是我无法包含正则表达式以在if语句关闭后停止搜索,例如'){'。
if(.*?)(\w+)\s*=\s*(\w+)\)
注意:包含> =或!=的行不得匹配
答案 0 :(得分:1)
只需五美分:
if(\s)*(\(){1}(.)+[^!=<>](=){1,1}?[^=]
此表达式与有效的逻辑运算符“!=”“ <=”“> =”不匹配。
答案 1 :(得分:0)
尝试一下
if\s*\([^{]*\s*\w+\s*=\s*\w+\s*[^{]*\)
如何制作:
您想在if语句的括号内标识类似num=3
之类的内容。您可以使用if\(\w+=\w+\)
进行此操作。但是,这有一个小问题。如果出现空白,它将失败。因此,它将无法识别num = 3
或apples = 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语句。