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,我想写一个正则表达式,让我能够找到包含三个或更多双字母(“oo”、“ss”、“tt”等)的文本文件中的所有行。下面是一个命令,我成功地使用它来查找包含两个或更多双字母的行: egrep ‘(([A-Za-z])\2.*){2,}’ sherlock.txt 运行此命令生成的行的一个示例如下: I had seen little of Holmes lately. My marriage had drifted us away from each 这一行实际上包含三个双字母(“ee”、“tt”

我想写一个正则表达式,让我能够找到包含三个或更多双字母(“oo”、“ss”、“tt”等)的文本文件中的所有行。下面是一个命令,我成功地使用它来查找包含两个或更多双字母的行:

egrep ‘(([A-Za-z])\2.*){2,}’ sherlock.txt
运行此命令生成的行的一个示例如下:

I had seen little of Holmes lately. My marriage had drifted us away from each
这一行实际上包含三个双字母(“ee”、“tt”和“rr”)。但是,当我使用以下命令打印包含三个或更多双字母的行时,没有输出:

egrep ‘(([A-Za-z])\2.*){3,}’ sherlock.txt

为什么这个代码不起作用?我遗漏了什么?

由于您没有提供您正在使用的语言/工具,下面是一个perl oneliner,它可以完成这项工作:

输入文件:

cat file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each
Perl:

cat file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each
输出:

cat file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each
I had seen Holmes lately. My marriage had drifted us away from each
perl -anE '@l=$_=~/(\w)\1/g;say if @l>2' file.txt 
I had seen little of Holmes lately. My marriage had drifted us away from each

([A-Za-z])\2.*{3,}
试试这个:([A-Za-z])\2.*++问题来自于您使用贪婪匹配的事实,最好先将
*
放在
(\w)\2){3}
的前面,但任何一种方法都应该有效,即使
(.[\w)\2){3}.*
如果需要整个字符串的话