我需要 preg_replace 多个相同的字母(只有 AZ 或 az,不是数字)连续三个相同的字母。任何人都可以帮我一个模式字符串吗?
例子:
输入:NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
输出:没有 MEK PUCES CUDAK AVVV VASMAAA
使用组 ( ([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
您可以使用带有反向引用的正则表达式:
preg_replace('/(.)\1+/', '$1', $str);
(.)
匹配任何字符并将其放入捕获组。\1
是对同一组的引用,并且+
限定了它可能出现一次或多次的前一个标记。因此,这会将至少两个相同字符的任何运行替换为一个。
如果您希望保留多个字符,如您的示例所示,您可以使用以下内容:
preg_replace('/(.)\1{2,}/', '$1$1$1', $str);
如果您需要限制字符集,则只需将 替换.
为字符类,例如[a-zA-Z]
.