Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 相同单词之间的正则表达式匹配字符串_Regex - Fatal编程技术网

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(应该在第一个空格处停止?)之后它仍然匹配所有字符吗?如果它在第一个单词中包含所有字符,为什么它仍然匹配行(为什么结尾不需要至少一个反向引用?)谢谢。