一位朋友问我这个问题,我很难过:有没有办法制作一个匹配同一个字符序列的正则表达式?例如,匹配'aaa','bbb',但不是'abc'?
m|\w{2,3}|
不会这样做,因为它匹配'abc'.
m|a{2,3}|
不会做的伎俩,因为它不匹配'bbb','ccc'等.
当然可以!分组和引用是你的朋友:
(.)\1+
将匹配2个或更多相同字符的出现.仅对于单词构成字符,请使用\w
而不是.
,即:
(\w)\1+
请注意,在Perl 5.10中,我们还有反向引用的替代符号.
foreach (qw(aaa bbb abc)) { say; say ' original' if /(\w)\1+/; say ' new way' if /(\w)\g{1}+/; say ' relative' if /(\w)\g{-1}+/; say ' named' if /(?'char'\w)\g{char}+/; say ' named' if /(?\w)\k +/; }