You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式"(.)+\1"的工作原理是什么?附Notepad++测试困惑

解析正则表达式 (.)+\1 的工作原理(附Notepad++中的实际匹配分析)

咱们先把这个正则拆成几个部分,一步步搞懂它的逻辑,再结合你提供的文本看看为什么结果会让你困惑:

正则各部分拆解

  • (.):这是第一个捕获组,作用是匹配任意单个字符(Notepad++默认设置下,.不会匹配换行符,除非你在搜索窗口勾选了「匹配换行符」选项)。特别要注意:每次(.)匹配到新字符时,这个捕获组的内容都会被覆盖更新成当前匹配的字符——因为后面跟着的+会让(.)重复执行。
  • +:贪婪量词,要求前面的(.)至少匹配1次,并且会尽可能匹配更多字符(直到遇到无法匹配的内容才停止)。
  • \1:反向引用,严格匹配第一个捕获组最后一次捕获到的字符。

核心匹配逻辑

把这些部分组合起来,这个正则的实际效果是:寻找长度至少为2的文本片段,要求片段的最后一个字符和片段中最后一次被(.)捕获的字符完全相同。

换个直白的说法:因为(.)+会贪婪地匹配字符,同时不断覆盖捕获组,所以最终\1其实就是片段的倒数第二个字符——所以这个正则本质上是在找结尾是两个连续相同字符的文本片段,并且会尽可能匹配最长的符合条件的片段。

举个简单例子:

  • 对于字符串"abbb",正则会匹配整个"abbb":(.)+先匹配"abb"(捕获组最后是"b"),然后\1匹配最后一个"b",刚好符合。
  • 对于孤立的两个相同字符,比如"ee",正则会直接匹配这两个字符。

结合你的文本分析

你提供的文本是:

Business Parks - Research business parks in the Reading area with conference capabilities Green Park - expensive and no advertising allowed except via their newsletter Arlington Business Park - no facility Thames Valley Science Park (TVSP) - Sleep Th...

里面符合匹配条件的片段包括:

  • "conference"中的连续"ee"(正则会匹配这个双字符片段,甚至会尝试贪婪匹配更长的、结尾为"ee"的片段)
  • "newsletter"中的连续"ll"

你感到困惑的核心原因应该是:这个正则和你可能预期的“匹配重复单词/短语”逻辑完全不同,它只关注文本片段的结尾是否有连续相同字符,而非整体内容的重复。

额外提示

如果你的目标是匹配重复的整个单词或短语,这个正则完全不适用——你需要用类似(\b\w+\b).*\1这样的正则(匹配重复的单词),或者根据具体需求调整规则。

内容的提问来源于stack exchange,提问作者Profplum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:22:38