Regex 相同单词之间的正则表达式匹配字符串
我试图从大型文本文档中捕获特定的模式。这种模式非常简单——如果一行以一个单词开头,以同一个单词结尾,我想捕捉这一行。 例如:Regex 相同单词之间的正则表达式匹配字符串,regex,Regex,我试图从大型文本文档中捕获特定的模式。这种模式非常简单——如果一行以一个单词开头,以同一个单词结尾,我想捕捉这一行。 例如: 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]开
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)$
它应该强制字符串在backreference之后结束,但它在所有五行上都匹配(不匹配组,但每行都完全匹配)。我想我对正则表达式缺少了一些基本的理解,因为我无法理解如何强制它匹配这个特定的模式,如果有人能解释一下我思维中的缺陷,那将是很有帮助的
我试图寻找这种模式,但大多数人都试图匹配已知单词,这里的复杂之处在于,我想要匹配任何一行,只要它以任意单词开头并以任意单词结尾(例如,文档中可能有N个阶段或任何其他任意单词)。我正在使用regex101测试模式匹配。它匹配整个字符串的原因是,在第一个
b
和字符串开头之间有一个单词边界
所发生的情况是,正则表达式将回溯,直到它能够在字符串的末尾匹配backreference(一个空字符串),而捕获组2将包含整个字符串,正如您在匹配中看到的那样
(.+)
希望至少匹配1个字符,末尾的\1
指的是组1中捕获的内容,它是一个空字符串
要仅匹配,您可以使字符类至少匹配一个或多个字符。[a-zA-Z0-9]+
您也可以尝试此操作
^phase\d.*phase\d$
字符类不应该是可选的^([a-zA-Z0-9]+)\b(+++)\b(\1)$
@Thefourthbird这是我犯过的最愚蠢的错误,请你写一个答案,我可以标记一下吗。如果您有耐心/时间,您能解释一下为什么在我添加\b(应该在第一个空格处停止?)之后它仍然匹配所有字符吗?如果它在第一个单词中包含所有字符,为什么它仍然匹配行(为什么结尾不需要至少一个反向引用?)谢谢。