我之前从未处理过正则表达式,我在这里面临一个问题。用户必须输入类似Var1(0,enum1,enum2)的文本,我必须按以下方式检查语法: -
1-确保Var1名称与我拥有的变量列表匹配..只是一个字符串比较
2-确保按顺序输入参数。
允许删除任何参数。并且根本不允许参数
然后我必须拿参数来填充一些对象
regex会为我做这个技巧,还是我必须去写一个解析器!?
谢谢!
答案 0 :(得分:2)
虽然你几乎可以用Regex做任何事情,但它几乎不是最好的做事方式。除了为了学习正则表达式之外,我无法在你的案例中使用正则表达式。
让自己有些头疼并编写解析器,在几个月内重新访问代码时,维护起来会容易得多。
答案 1 :(得分:0)
当你需要验证语法时,我的直觉反应是:闻起来像一个解析器!
答案 2 :(得分:0)
我不会用正则表达式执行此操作,但是这里有一个可以执行您想要的操作(我使用的是一般的regexp语法 - 没有C#特定的。)
假设变量为var1,var2,var_3,并且参数1的选项为par1_1,par1_2和参数2的选项为par2_1,par2_2,par2_3等,则正则表达式为:
(var_1|var_2|var_3)\(((par1_1|par1_2|par1_3),)?((par2_1|par2_2,)?((par3_1|par3_2)?\)
请注意:
答案 3 :(得分:0)
^ #Start of expression
(?<func> [^(]+ ) #All characters before the parenthesis
\( #The parenthesis
(
(?<param> [^,)]+ ) #A string that ends before the following , or )
(,| \)$ ) #The following , or ). Make sure that ) only appears at end of line
)* #Repeat zero or more times
$ #End of statement
(?<= \) ) #Make sure that last character was ) and not ,
将该语句与RegexOptions.IgnorePatternWhitespace一起使用。 match.Groups(“func”)包含函数名称和match.Groups(“param”)。Captures包含捕获的参数。
为简单起见,验证正则表达式之外的实际函数名称和参数。