写正则表达式的问题

时间:2010-09-27 10:20:30

标签: c# regex

我正在尝试编写一个只匹配以下任何内容的正则表达式:

{string}
{string[]}
{string[6]}

而不是最后一行中的6,可能有任何正整数。此外,只要string出现在上述行中,就可能有int

这是我最初写的正则表达式:{(string|int)(([]|[[0-9]])?)}。它运作良好但不允许在方括号内超过一位数。为了解决这个问题,我采用了这种方式进行修改:{(string|int)(([]|[[0-9]*])?)}

修改后的正则表达式似乎存在严重问题。它匹配{string[][]}。你能告诉我是什么导致它与此相匹配吗?此外,当我尝试将[0-9]括在paranthesis中时,我得到一个例外,说“too many )'s”。为什么会这样?

您能告诉我如何编写满足我要求的正则表达式吗?

注意:我在C#

中尝试这个

2 个答案:

答案 0 :(得分:3)

您需要转义{}和[]的特殊字符:

\{(string|int)(\[\d*\])?\}

您可能需要使用[0-9]而不是\ d,具体取决于您使用的引擎。

答案 1 :(得分:0)

您需要转义[,因为它表示正则表达式中的字符集;否则[[0-9]*]将被解释为[0 - 9*量词的字符类,后跟文字]。所以:

{(string|int)(\[[0-9]*])?}

由于量词*也允许零重复,因此您不需要空[]的特殊情况。