正则表达式 - 返回引用混淆

时间:2014-02-10 19:51:32

标签: java regex

正在阅读Oracle正则表达式教程。我在本文中研究Back References。我知道一旦找到匹配的组,它就会被保存在内存中以供反向引用。所以这是我的困惑: -

  1. 除了简单的用法之外,后向参考如何显着?
  2. 后引用在内存中保留多长时间?我想一旦正则表达式引擎终止,它应该从内存中删除吗?
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

反向引用最常见的用法是检查事先未知的事物的重复。

例如,您要检查是否有任何单词连续重复两次。你不知道哪个词重复 - 你知道的最多的是一个单词的模式。反向引用允许您捕获一个单词,然后检查它是否后跟另一个自身实例。

\b(\w+)\b\W+\1\b

要知道这有多重要,请考虑您要检查重复字符的问题,反向引用可以做到这一点:

(?s)(.)\1

如果您要为此编写理论正则表达式,则必须枚举字母表中的所有内容:

(aa|bb|cc|....|AA|BB|CC...)

反向引用尝试匹配捕获组匹配的相同文本。引擎始终跟踪捕获组匹配的文本(对于大多数引擎 - 最后一次捕获一些文本)。因此,捕获组的内容保留在内存中(对于Java,准确地说在Matcher对象中),直到对它的所有引用都终止(对于Java,当您调用find()时,{{ 1}},...或当matches()对象超出范围时。)