代码之家  ›  专栏  ›  技术社区  ›  Igor Konoplyanko

regex:匹配到第一次,而不是最后一次出现

  •  1
  • Igor Konoplyanko  · 技术社区  · 15 年前

    我有一根这样的绳子:

    BEGIN
    blabla..
    END;
    
    BEGIN
    one two    
    END;
    

    我想做一个单独找到这部分的regex。 我做了正则表达式 (?i)BEGIN[\s\S]*(?i)END; 但它发现这个字符串作为一个匹配的实例。但我需要两个。如何进行搜索 END; 第一次发生,而不是最后一次?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  4
  •   SilentGhost    15 年前
    (?i)BEGIN[\s\S]*?(?i)END;
    

    这叫做懒惰量词。

        2
  •  2
  •   kennytm    15 年前

    你需要一个不贪婪的 * :

    (?i)BEGIN[\s\S]*?(?i)END;
    

    请注意,regex不能处理嵌套的begin/end对。最好使用解析器。