我正在尝试编写一个只匹配以下任何内容的正则表达式:
{string}
{string[]}
{string[6]}
而不是最后一行中的6
,可能有任何正整数。此外,只要string
出现在上述行中,就可能有int
。
这是我最初写的正则表达式:{(string|int)(([]|[[0-9]])?)}
。它运作良好但不允许在方括号内超过一位数。为了解决这个问题,我采用了这种方式进行修改:{(string|int)(([]|[[0-9]*])?)}
。
修改后的正则表达式似乎存在严重问题。它匹配{string[][]}
。你能告诉我是什么导致它与此相匹配吗?此外,当我尝试将[0-9]
括在paranthesis中时,我得到一个例外,说“too many )'s
”。为什么会这样?
您能告诉我如何编写满足我要求的正则表达式吗?
注意:我在C#
中尝试这个答案 0 :(得分:3)
您需要转义{}和[]的特殊字符:
\{(string|int)(\[\d*\])?\}
您可能需要使用[0-9]
而不是\ d,具体取决于您使用的引擎。
答案 1 :(得分:0)
您需要转义[
,因为它表示正则表达式中的字符集;否则[[0-9]*]
将被解释为[
和0
- 9
,*
量词的字符类,后跟文字]
。所以:
{(string|int)(\[[0-9]*])?}
由于量词*
也允许零重复,因此您不需要空[]
的特殊情况。