嵌套括号的正则表达式

时间:2017-08-31 15:38:09

标签: c# regex

我有以下文字:

  

[atdSd [asdasd< 4REGEH22> asdosy] *** oopprefs [ew< 16REGEH30> rdtr] pppp555b

我的比赛应如下:

  1. [asdasd<4REGEH22>asdosy]
  2. [ew<16REGEH30>rdtr]
  3. 我的尝试

    我试图自己制作,但结果是:

    1. [atdSd[asdasd<4REGEH22>asdosy]
    2. [ew<16REGEH30>rdtr]
    3. 我使用以下表达式:

      \[\S+<(\d+)REGEH(\d+)>\S+\]
      

      具体细节

      条件是:

      • 比赛中必须没有空格。
      • 在比赛中你必须有[(ASCII符号)&lt;(某些数字)REGEH(某些数字)&gt;(ASCII符号)]
      • 如果您有嵌套括号,则需要匹配最内层。 [asdSd[asdasd<4REGEH23>asdUsd]应与[asdasd<4REGEH23>asdUsd]
      • 相匹配

      不应该产生匹配的示例

        

      [atdSd [&lt; 4REGEH22&gt; asdosy] *** oopprefs [ew&lt; 16REGEH&gt; rdtr] pppp555b

      问题

      如何匹配内括号?

2 个答案:

答案 0 :(得分:1)

  var st = "[atdSd[asdasd<4REGEH22>asdosy] ***oopprefs[ew<16REGEH30>rdtr]pppp555b";

        List<string> result = new List<string>
                            (Regex.Matches(st, @"\[[^[]+REGEH.*?\]")
                            .Cast<Match>()
                            .Select(x => x.Value)
                            .ToList());

        // [asdasd<4REGEH22>asdosy] [ew<16REGEH30>rdtr]

答案 1 :(得分:0)

这个怎么样?

\[[^\s\[]+<(\d+)REGEH(\d+)>[[^\s\[]+\]

基本上将\S替换为[^\s\[],即一个否定的char类匹配不是whitepsace字符,而且至关重要的是 - 不是[

http://regexr.com/3glld