我想要一个在C#中接受var(int,enum1,enum2)的小正则表达式

时间:2009-11-10 13:04:21

标签: c# regex parsing

我之前从未处理过正则表达式,我在这里面临一个问题。用户必须输入类似Var1(0,enum1,enum2)的文本,我必须按以下方式检查语法: -

1-确保Var1名称与我拥有的变量列表匹配..只是一个字符串比较

2-确保按顺序输入参数。

允许删除任何参数。并且根本不允许参数

然后我必须拿参数来填充一些对象

regex会为我做这个技巧,还是我必须去写一个解析器!?

谢谢!

4 个答案:

答案 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)?\)

请注意:

  • (a | b | c)选择a,b或c
  • 中的一个
  • \(和\)匹配括号(普通“(”和“)”组)
  • (...)?是可选的
  • 每个可选参数块后面都有一个逗号,但最后一个参数块除外。

答案 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包含捕获的参数。

为简单起见,验证正则表达式之外的实际函数名称和参数。