我正在寻找匹配不止一次重复一个字母并且彼此相邻的字词的正则表达式。
以下是一个例子:
This is an exxxmaple oooonnnnllllyyyyy!
到目前为止,我还没有发现任何可以完全匹配的内容:
exxxmaple and oooonnnnllllyyyyy
我需要找到它并将它们放在一个数组中,如下所示:
preg_match_all('/\b(???)\b/', $str, $arr) );
有人可以解释我必须使用的正则表达式吗?
答案 0 :(得分:2)
您可以使用非常简单的正则表达式
\S*(\w)(?=\1+)\S*
了解正则表达式在http://regex101.com/r/rF3pR7/3
的匹配情况 \S
匹配空格以外的任何内容
*
量词,\S
(\w)
匹配单个字符,在\1
(?=\1+)
正面向前看。断言加盖字符后跟itsef \1
+
量词,重复字符的一个或多个出现
\S*
匹配空格以外的任何内容
修改强>
如果重复必须不止一次,那么对正则表达式稍作修改就可以了。
\S*(\w)(?=\1{2,})\S*
答案 1 :(得分:2)
如果您想丢弃apple
等字样
\b\w*(\w)(?=\1\1+)\w*\b
或
\b(?=[^\s]*(\w)\1\1+)\w+\b
试试这个。看看演示。
答案 2 :(得分:1)
您可以使用此模式:
\b\w*?(\w)\1{2}\w*
\w
类和字边界\b
将搜索范围限制为单词。请注意,可以删除单词边界,但是,它会减少获得匹配的步骤数(作为延迟量词)。另请注意,如果您要查找单词(通常含义),则需要删除单词边界并使用[a-zA-Z]
代替\w
。
(\w)\1{2}
检查是否存在重复的字符。在第1组中捕获单词字符,并且必须跟随捕获组的内容(反向引用\1
)。