如何使用Perl正则表达式找到重复的字母?

Bri*_*n G 23 regex perl character

我正在寻找一个可以找到重复字母的正则表达式.所以任何两次或更多的字母,例如:

booooooot or abbott
Run Code Online (Sandbox Code Playgroud)

我不会提前知道我要找的那封信.

这是我在采访中被问到的一个问题,然后在采访中被问到.没有那么多人认真对待.

Ada*_*ire 53

你可以找到任何一个字母,然后用它\1来第二次(或更多)找到同一个字母.如果你只需要知道这封信,那么$1它将包含它.否则,您可以将第二个匹配连接到第一个匹配.

my $str = "Foooooobar";

$str =~ /(\w)(\1+)/;

print $1;
# prints 'o'
print $1 . $2;
# prints 'oooooo'
Run Code Online (Sandbox Code Playgroud)


Ken*_*eng 14

我认为你真的想要这个而不是"\ w",因为它包括数字和下划线.

([a-zA-Z])\1+
Run Code Online (Sandbox Code Playgroud)

好的,好的,我可以暗示Leon.将此用于unicode-world或posix的东西.

([[:alpha:]])\1+
Run Code Online (Sandbox Code Playgroud)

  • 我们生活在一个unicode世界.[a-zA-Z]不会涵盖大多数语言.[[:alpha:]]会更正确. (2认同)

has*_*seg 9

我认为使用反向引用会起作用:

(\w)\1+
Run Code Online (Sandbox Code Playgroud)

\w基本上是[a-zA-Z_0-9]这样的,如果你只想匹配A和Z之间的字母(不区分大小写),请[a-zA-Z]改用.

(编辑:或者,像他的评论中提到的Tanktalus(以及其他人也回答过) [[:alpha:]],这是区域敏感的)


Jon*_*ski 6

使用\ N来引用以前的组:

/(\w)\1+/g
Run Code Online (Sandbox Code Playgroud)