3

我今天的第二个问题!

我想在 c# 中使用正则表达式获取括号(左括号和右括号)之间包含的文本。我使用这个正则表达式:

@"\{\{(.*)\}\}

这是一个例子:如果我的文字是:

text {{text{{anothertext}}text{{andanothertext}}text}} and text.

我想得到:

{{text{{anothertext}}text{{andanothertext}}text}}

但有了这个正则表达式,我得到:

{{text{{anothertext}}

我知道另一种获取文本的解决方案,但是有正则表达式的解决方案吗?

4

1 回答 1

2

幸运的是,.NET 的正则表达式引擎支持平衡组定义形式的递归:

Regex regexObj = new Regex(
    @"\{\{            # Match {{
    (?>               # Then either match (possessively):
     (?:              #  the following group which matches
      (?!\{\{|\}\})   #  (but only if we're not at the start of {{ or }})
      .               #  any character
     )+               #  once or more
    |                 # or
     \{\{ (?<Depth>)  #  {{ (and increase the braces counter)
    |                 # or
     \}\} (?<-Depth>) #  }} (and decrease the braces counter).
    )*                # Repeat as needed.
    (?(Depth)(?!))    # Assert that the braces counter is at zero.
    \}}               # Then match a closing parenthesis.", 
    RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
于 2013-10-15T19:46:23.017 回答