REGEX - 匹配包含彼此相邻重复的字母的单词


REGEX - match words that contain letters repeating next to each other

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 )。