im 寻找一个正则表达式,该正则表达式匹配多次重复字母且彼此相邻的单词。
下面是一个示例:
This is an exxxmaple oooonnnnllllyyyyy!
到目前为止,我还没有找到任何可以完全匹配的东西:
exxxmaple and oooonnnnllllyyyyy
我需要找到它并将它们放在一个数组中,如下所示:
preg_match_all('/'b(???)'b/', $str, $arr) );
有人可以解释我必须使用什么正则表达式吗?
您可以使用非常简单的正则表达式,例如
'S*('w)(?='1+)'S*
查看正则表达式如何匹配 http://regex101.com/r/rF3pR7/3
'S
匹配空格以外的任何内容*
量词,零次或多次出现'S
('w)
匹配单个字符,以'1
捕获(?='1+)
向前看。断言被俘虏的字符后跟 itsef'1
+
量词,重复字符的一个或多个出现
次数'S*
匹配除空格以外的任何内容
编辑
如果重复必须多次,则对正则表达式稍作修改就可以了
'S*('w)(?='1{2,})'S*
例如 http://regex101.com/r/rF3pR7/5
如果你想丢弃像apple
等单词,请使用这个。
'b'w*('w)(?='1'1+)'w*'b
或
'b(?=[^'s]*('w)'1'1+)'w+'b
试试这个。请参阅演示。
http://regex101.com/r/kP8uF5/20
http://regex101.com/r/kP8uF5/21
您可以使用
此模式:
'b'w*?('w)'1{2}'w*
'w
类和单词边界'b
将搜索限制为单词。请注意,可以删除单词边界,但是,它会减少获取匹配的步骤数(作为惰性量词)。另请注意,如果您要查找单词(在通常意义上),则需要删除单词边界并使用[a-zA-Z]
而不是'w
。
('w)'1{2}
检查是否存在重复字符。单词字符在组 1 中捕获,并且必须跟在捕获组的内容后面(反向引用 '1
)。