我需要使用正则表达式查找任何给定文件中的if语句(Java Style)。然后我需要检查条款,即 -
if(a < b)
有1个条款
if(a || b)
有2个子句
if(a || b && c)
有3个条款
子句是一个不包含任何逻辑运算符的表达式。 if语句中的表达式是单个子句,除非它由逻辑运算符分隔。
我想知道的是如何找到写条款的正则表达式。因为如果说 -
[i][f][ ][(][A-Za-z!][)]
会给我一个错误
我不知道如何搜索任何单词,上面的正则表达式正在搜索单个字母或感叹号。
提前谢谢
答案 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是您要查找的子句数量)。
请注意,此模式假设子句永远不会包含|
或&
的单个实例。如果要求考虑这些字符,那么模式将需要更加复杂。