regex - 正则表达式:“(.)+\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',我预计会出现一些重复字符匹配的结果。但是,我特别困惑为什么“绿色”得到评估并且仍然继续到“新闻通讯”。
解决方案
正如预期的那样,似乎(.)+
匹配一个或多个字符,但是每次匹配都会更新捕获的文本。因此它从字符串的开头匹配到最后一个双字符。\1
正在匹配 的前一个匹配项,(.)
它始终是\1
可以匹配的前一个字符。
推荐阅读
- angular - 如何将选定的复选框保存为离子中的数组
- testing - 有哪些方式可以为 K8s 提供外网连接?
- javascript - 将 cell.js 演示转换为 Brython 的问题
- hasura - 有没有办法为所有 hasura 查询和突变编写中间件?
- opencv - 没有名为“cv2”的模块作为树莓派
- python - 使用 Google Vision API 进行头发检测和裁剪
- amazon-web-services - AWS CDK 如何为管道中创建的新角色设置权限边界?
- python - Python 检查 dict 列表是否顺序正确或有额外的 dict
- mysql - MySQL计算周转时间
- python - DJango 邮件在本地工作但不在生产中