使用正则表达式获得最内在的分隔符

时间:2014-03-28 17:44:08

标签: regex

我正在尝试将正则表达式用于最内层的"我想要的信息"该字符串中的文字:

{%%% =选择(MMGDS1,"邮轮",{%%%信息我想要%%%} %%%}

我试图用这个:

^(?!.*\%{3})\{\%{3}(.*?)\%{3}\}

但没有运气。有谁知道这样做的方法?

3 个答案:

答案 0 :(得分:1)

如果您想要的信息不包含任何%字符,则可以使用否定类:

%{3}([^%{}]*)%{3}

更正确的方法是使用这种格式的负向前瞻:

%%%((?:(?!%%%|[{}]).)*)%%%

我已将{}放在不应匹配的字符内。

基本上,(?:(?!%%%|[{}]).)*会匹配除%%%{}以外的任何字符。

regex101 demo

答案 1 :(得分:1)

看起来你可以做前瞻性的断言。这有效。

 #  {%%%((?:(?!{%%%|%%%})[\S\s])*)%%%}

 {%%%                         # Opening delimiter '{%%%'
 (                            # (1 start), 'The info you want'
      (?:                          # Cluster grp start
           (?! {%%% | %%%} )            # Lookahead, not delimiters '{%%%' nor '%%%}'
           [\S\s]                       # Ok, grab another character (any)
      )*                           # Cluster grp end, do 0 - many times
 )                            # (1 end)
 %%%}                         # Closing delimiter `%%%}`

答案 2 :(得分:0)

那是:

\{.*\{%{3}(.*)%{3}\}.*\}

结果:

匹配1:

{%%%=Select(MMGDS1,"cruise",{%%%The Info I want%%%}%%%}

第1组:

The Info I want