我需要在相同的三行中预先放置多个相同的字母(只有A-Z或a-z,而不是数字)。任何人都可以用模式字符串帮助我吗?
示例:
输入:没有MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
输出:没有MEK PUCES CUDAK AVVV VASMAAA
答案 0 :(得分:6)
使用群组(([A-Za-z])
)和反向引用(\1
)。
$text = "NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
echo preg_replace('/([A-Za-z])\1{3,}/', "$1$1$1", $text);
# => NO MEK PUCES CUDAK AVVV VASMAAA
答案 1 :(得分:2)
您可以使用带反向引用的正则表达式:
preg_replace('/(.)\1+/', '$1', $str);
(.)
匹配任何字符并将其放入捕获组。 \1
是对同一组的引用,+
限定了之前可能出现一次或多次的令牌。因此,这将只替换一个至少两个相同字符的任何运行。
如果您希望保留多个字符,就像您的示例所示,您可以使用以下内容:
preg_replace('/(.)\1{2,}/', '$1$1$1', $str);
如果您需要限制字符集,则只需将.
替换为字符类,例如[a-zA-Z]
。