複数の同じ文字 (数字ではなく AZ または az のみ) を同じ 3 つの行に preg_replace する必要があります。誰かがパターン文字列で私を助けることができますか?
例:
入力: NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
出力: NO 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
同じグループへの参照であり+
、前のトークンが 1 回以上出現する可能性があることを修飾します。したがって、これにより、少なくとも 2 つの同一文字の連続が 1 つだけに置き換えられます。
例が示すように、複数の文字を保持する場合は、次を使用できます。
preg_replace('/(.)\1{2,}/', '$1$1$1', $str);
文字セットを制限する必要がある場合は.
、文字クラスで交換するだけ[a-zA-Z]
です。