首页 > 解决方案 > 正则表达式:“(.)+\1”如何工作?

问题描述

我正在研究一些正则表达式填字游戏。我决定采用其中一个表达式并将其应用于一些现实生活中的文本(使用 Notepad++),看看究竟会发生什么。让我一头雾水!

我匹配的正则表达式是:

(.)+\1

我应用它的文本是:

商业园 - 在阅读区研究具有会议功能的商业园

Green Park - 价格昂贵且不允许投放广告,除非通过他们的时事通讯

阿灵顿商业园 - 无设施 泰晤士河谷科学园 (TVSP) -

睡觉

我得到的匹配是(注意匹配如何是中间词):

Business Parks - Research business
Green Park - expensive and no advertising allowed except via their newslett
Arlington Business
Thames Vall
Slee

如果有人能带我了解这里发生的事情,我将不胜感激。由于'\1',我预计会出现一些重复字符匹配的结果。但是,我特别困惑为什么“绿色”得到评估并且仍然继续到“新闻通讯”。

标签: regex

解决方案


正如预期的那样,似乎(.)+匹配一个或多个字符,但是每次匹配都会更新捕获的文本。因此它从字符串的开头匹配到最后一个双字符。\1正在匹配 的前一个匹配项,(.)它始终是\1可以匹配的前一个字符。


推荐阅读