正则表达式匹配代码中的if语句

时间:2017-11-09 23:46:51

标签: regex string-matching

我需要使用正则表达式查找任何给定文件中的if语句(Java Style)。然后我需要检查条款,即 -

if(a < b)有1个条款

if(a || b)有2个子句

if(a || b && c)有3个条款

子句是一个不包含任何逻辑运算符的表达式。 if语句中的表达式是单个子句,除非它由逻辑运算符分隔。

我想知道的是如何找到写条款的正则表达式。因为如果说 -

[i][f][ ][(][A-Za-z!][)]会给我一个错误

我不知道如何搜索任何单词,上面的正则表达式正在搜索单个字母或感叹号。

提前谢谢

1 个答案:

答案 0 :(得分:0)

Regex本身不会为您返回计数,但由于您使用的是Notepad ++,搜索功能会让您知道找到了多少匹配项。唯一的问题是,您需要为每个要查找的子句提供单独的模式。

搜索包含一个子句的if语句:

if\([^|&\n]*?\)

https://regex101.com/r/ZGopJH/1

两个条款:

if\(([^|&\n]*? (?:\|\||&&) [^|&\n]*?)\)

https://regex101.com/r/EcYizT/3

三个条款:

if\(([^|&\n]*? (?:\|\||&&) [^|&\n]*?){2}\)

https://regex101.com/r/EcYizT/4

如果超过三个,只需相应地增加模式末尾的量词(参考上面的{2};将其更改为n - 1,其中n是您要查找的子句数量)。

请注意,此模式假设子句永远不会包含|&的单个实例。如果要求考虑这些字符,那么模式将需要更加复杂。