如何使用正则表达式搜索最小范围

时间:2014-02-14 13:35:13

标签: regex

我有这个字符串(例如)

abcd CCC abcd abcd CCC abcd abcd BBB abcd abcd DDD abcd abcd CCC abcd

并且需要找到从CCC到DDD的BBB中的最小范围子串

  

abcd CCC abcd abcd CCC abcd abcd BBB abcd abcd DDD abcd abcd CCC abcd

但我的正则表达不起作用((

/(?!.+CCC).+BBB.+DDD/i

这个正则表达式适用于没有最后一个CCC的字符串,但不是很好......

Live examle on regexr.com

请帮助我,对不起我的英语=)

2 个答案:

答案 0 :(得分:1)

尝试

CCC(?:(?!CCC).)*BBB(?:(?!CCC.*BBB).)*DDD

它与距CCC最近的BBB匹配,然后在最终CCC ...something... BBB之前检查是否没有其他DDD。 给定以下输入字符串,匹配为粗体

  

abcd CCC abcd abcd CCC abcd abcd BBB abcd CCC abcd DDD abcd abcd CCC abcd


但请注意,它会找到此类序列的 first 最小形式。如果字符串下方的CCC ...something... BBB ...something... DDD更小,则无法找到它。我认为任何正则表达都不会 因此,对于以下输入字符串,匹配以粗体显示,而最短的整数以斜体显示:

  

abcd CCC abcd abcd CCC abcd abcd BBB abcd DDD abcd abcd CCC abcd BBB abcd DDD abcd

答案 1 :(得分:-1)

您可以使用此正则表达式:

CCC(?:(?!CCC).)*?BBB(?:(?!CCC.*?BBB).)*?DDD

在线演示:http://regex101.com/r/fV3yW8