2

複数の同じ文字 (数字ではなく AZ または az のみ) を同じ 3 つの行に preg_replace する必要があります。誰かがパターン文字列で私を助けることができますか?

例:

入力: NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

出力: NO MEK PUCES CUDAK AVVV VASMAAA

4

2 に答える 2

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
于 2013-08-02T12:43:21.170 に答える
3

後方参照で正規表現を使用できます。

preg_replace('/(.)\1+/', '$1', $str);

(.)任意の文字に一致し、キャプチャ グループに入れます。\1同じグループへの参照であり+、前のトークンが 1 回以上出現する可能性があることを修飾します。したがって、これにより、少なくとも 2 つの同一文字の連続が 1 つだけに置き換えられます。

例が示すように、複数の文字を保持する場合は、次を使用できます。

preg_replace('/(.)\1{2,}/', '$1$1$1', $str);

文字セットを制限する必要がある場合は.、文字クラスで交換するだけ[a-zA-Z]です。

于 2013-08-02T12:42:08.730 に答える