【发布时间】:2021-02-14 12:52:58
【问题描述】:
我正在尝试从大型文本文档中捕获特定模式。这种模式非常简单——如果一行以一个单词开头并以同一个单词结尾,我想捕获那一行。 例如:
phase1 begin trial end phase1
phase2.begin distribution end phase2
phase3 allow buying in phase3 but
phase4 has no end
phase5 is test of phase
在本文档中,我希望在第 1 行和第 2 行得到匹配,因为这两行都以相同的单词 [a-zA-Z0-9] 开头,因此第 3 行不应该匹配,因为它没有结束使用相同的单词(尽管它在字符串中具有相同的单词),第 4 行和第 5 行甚至根本没有第一个单词。 我尝试使用模式:
^([a-zA-Z0-9]*\b)(.+)(\b\1)$
它应该在反向引用之后强制字符串结束,但它在所有五行上都匹配(不匹配组,但每行都有一个完全匹配)。我认为我缺少对正则表达式的一些基本理解,因为我无法理解如何强制它匹配这个特定的模式,如果有人能解释我的想法中的缺陷会很有帮助。
我试图寻找这种模式,但大多数人都试图匹配已知单词,这里的复杂性是我想匹配任何行,只要它以任意单词开头并以它结尾(例如,可能有N 个阶段或文档中写入的任何其他任意单词)。我正在使用 regex101 来测试我的模式匹配。
【问题讨论】:
-
字符类不应该是可选的
^([a-zA-Z0-9]+)\b(.+)\b(\1)$regex101.com/r/Y2uHdt/1 -
@Thefourthbird 这是我做过的最愚蠢的错误,请你写一个答案以便我标记它。如果您有耐心/有时间,您能否解释为什么即使在我添加 \b 之后它仍然匹配所有字符(应该在第一个空格处停止?)以及为什么它仍然匹配行,如果它包含第一个单词中的所有字符(为什么没有最后不需要至少 1 个反向引用吗?)谢谢。
标签: regex