我正在尝试使用正则表达式检查生成的C代码。
实际上我需要检查的行总是以相同的方式开始
R_Wrt_somename(V_var)
或
R_Wrt_othername((int64) (V_var2 * 3))
我已经有了第一个表达式,但是我无法得到函数调用的第二种可能性。
有人能帮我解决这个问题吗?当我刚开始与他们合作时,我也会欣赏正则表达式和解释。
第一个函数类型的表达式:
R_Wrt_(\w+)\((\s*(V_)[a-zA-Z_0-9\[\] ]+)
答案 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个或更多字面右括号。