【问题标题】:Regex to match if statements in code正则表达式匹配代码中的 if 语句
【发布时间】:2017-11-09 23:46:51
【问题描述】:

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

if(a < b) 有 1 个子句

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

if(a || b && c) 有 3 个子句

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

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

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

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

提前谢谢你

【问题讨论】:

  • 方括号用于创建字符集,它将匹配其中包含的字符之一。仅包含一个字符的字符集与仅正常写入这些字符相同(有一些值得注意的例外。例如,[i][f]if 的模式相同。
  • 除此之外,这个问题的背景是什么?您是否将此正则表达式模式合并到代码中?使用文本编辑器?你想让它返回什么?所有条款的清单?他们的数量?
  • 你的正则表达式可以很容易地写成:if\s?([A-Za-z!])
  • @CAustin 我需要计算带有 1 个子句的 if 的数量、带有 2 个子句的 if 的数量等。我只需要一个数字,我正在文本编辑器中编写正则表达式。我在 Notepad++ 中有一个巨大的程序,我想使用正则表达式来查找计数,因为该程序有 302 个 if 语句。

标签: regex string-matching


【解决方案1】:

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 是您要查找的子句数)。

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

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 2020-08-26
    • 2012-04-30
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多