gpt4 book ai didi

regex - 正则表达式 "(aa)+\1"如何匹配 "aaaaaa"?

转载 作者:行者123 更新时间:2023-12-04 09:25:34 29 4
gpt4 key购买 nike

谁能解释一下正则表达式引擎匹配(aa)+\1的过程反对 aaaaaa ?我知道当你使用 + 时有一个叫做回溯的过程。或 *但我不确定在这个例子中它是如何工作的。

最佳答案

当您将量词放在捕获组之外时,它不会用量词捕获与该模式匹配的整个字符串。它只是匹配模式匹配的最后一个重复。

所以,(aa)+不会捕获 aaaa在捕获组中,但只是最后一对 - aa ,以便它可以满足正则表达式模式的其余部分。

所以,与 (aa)+\1 , 模式首先匹配 - aaaa ,然后是反向引用 \1匹配捕获的组 - aa .因此匹配字符串 - aaaaaa .不是 (aa)+不会匹配所有 a's ,因为这样就没有剩余的东西可以被 \1 匹配了.

这是正则表达式的分解 (aa)+\1 :

  • (aa)+匹配前两个 aa在字符串中。剩余字符串 - aaaa .
  • 还有更多要匹配的(aa)+ ,所以它继续匹配下一个 aa .剩余字符串 - aa .
  • 再次 (aa)+可以匹配剩余的字符串。所以它匹配下一个 aa .剩余字符串 - "" .请记住,默认情况下量词是贪婪的。他们会尽可能多地匹配。
  • 现在,(aa)+不能再匹配了。
  • 模式中的下一个是 \1 .但是没有什么可以匹配的了。
  • 回溯 (aa)+ 匹配的最后一个模式.剩余字符串 - "aa" .
  • 现在 \1再次尝试匹配,成功匹配aa ,因为这是当前第一个捕获组中的内容。


  • 引用文献:
  • Regular-Expressions.info - Catastrophic Backtracking
  • 关于regex - 正则表达式 "(aa)+\1"如何匹配 "aaaaaa"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419866/

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