代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

正则表达式中的零宽度元素是什么?

  •  5
  • nonopolarity  · 技术社区  · 15 年前

    最近,我在正则表达式中看到了“零宽度元素”。它们是什么?是否可以将它们视为ghost数据,以便进行替换时,它们不会被替换,以及 ( ) 匹配,他们不会进入 matches[1] , matches[2] 等等?

    有没有一个很好的教程来指导它的各种用途?他们来这儿很久了吗?奥雷利的正则表达式书的哪个版本是第一个讨论它们的?

    1 回复  |  直到 10 年前
        1
  •  5
  •   Tim Pietzcker    15 年前

    零宽度环视断言的要点是,它们检查某个正则表达式是否可以从当前位置向前或向后匹配,而不实际将其添加到匹配中。所以,是的,他们不会计入捕捉组,是的,他们的匹配不会被替换(因为他们一开始就不匹配)。

    但是,你 可以 在lookaround断言中有一个捕获组 进入 matches[1] 等。

    例如,在C#:

    Regex.Replace("ab", "(a)(?=(b))", "$1$2");
    

    会回来的 abb .

    一个非常好的关于正则表达式的在线教程可以在 http://www.regular-expressions.info (尽管在某些地区有点过时)。

    它包含一个关于 zero-width lookaround assertions (和 Part II ).

    当然,这两方面都有深入的研究 Mastering Regular Expressions 以及 Regular Expressions Cookbook .