正则表达式解析C代码的一些特殊情况

时间:2015-09-03 05:58:21

标签: regex

我正在尝试使用正则表达式检查生成的C代码。

实际上我需要检查的行总是以相同的方式开始

R_Wrt_somename(V_var)

R_Wrt_othername((int64) (V_var2 * 3))

我已经有了第一个表达式,但是我无法得到函数调用的第二种可能性。

有人能帮我解决这个问题吗?当我刚开始与他们合作时,我也会欣赏正则表达式和解释。

第一个函数类型的表达式:

R_Wrt_(\w+)\((\s*(V_)[a-zA-Z_0-9\[\] ]+)

1 个答案:

答案 0 :(得分:0)

这是一个应该获取预期结果的正则表达式:

R_Wrt_(\w+)\((?:\((\w+)\)\s*)?\(?(\s*(V_)[a-zA-Z_0-9\[\]* ]+)\)*

请参阅demo

正则表达式匹配:

  • R_Wrt_ - 文字R_Wrt
  • (\w+) - 1个或多个英文字母,数字或下划线(捕获到第1组)
  • \( - 字面开括号
  • (?:\((\w+)\)\s*)? - 一个可选的非捕获组(以免混乱组)匹配...
    • \( - 字面开括号
    • (\w+) - 一个或多个英文字母,数字或下划线(捕获到第2组)
    • \)\s* - 带有可选空格的文字右括号
  • \(? - 文字可选左括号
  • (\s*(V_)[a-zA-Z_0-9\[\]* ]+) - 一个捕获组3(来自您的原始正则表达式)匹配...
    • \s* - 可选空白
    • (V_) - 文字V_(捕获到第4组)
    • [a-zA-Z_0-9\[\]* ]+ - 套装中的1个或多个字符
  • \)* - 0个或更多字面右括号。