gpt4 book ai didi

java - 正则表达式 - 反向引用困惑

转载 作者:行者123 更新时间:2023-12-02 06:13:23 27 4
gpt4 key购买 nike

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

  1. 除了简单的用法之外,反向引用有何重要意义?
  2. 反向引用在内存中保留多长时间?我想一旦正则表达式引擎终止,它就应该从内存中删除?

谢谢。

最佳答案

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

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

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

要知道这有多重要,请考虑要检查重复字符的问题,反向引用可以轻松完成此操作:

(?s)(.)\1

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

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

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

关于java - 正则表达式 - 反向引用困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com