2

私は解決策を求めてインターネット全体を検索してきましたが、見つけることができませんでした。

文字列内の重複する文字を削除する必要がありますが、文字列に整数の文字を繰り返す/残すことを許可する例外も含めたいと思います。

たとえば、次のことを試しました。

$str = 'This ----------is******** a bbbb 999-999-9999 ******** 8888888888 test 4444444444 ********##########Sammy!!!!!! ###### hello !!!!!!';

$t1 = preg_replace('/(.)\1{3,}/','',$str);
$t2 = preg_replace('/(\S)\1{3,}/','',$str);
$t3 = preg_replace('{(.)\1+}','$1',$str);
$t4 = preg_replace("/[;,:\s]+/",',',$str);
$t5 = preg_replace('/\W/', '', $str);
$t6 = preg_replace( "/[^a-z]/i", "", $str);

echo '$t1 = '.$t1.'<br>';
echo '$t2 = '.$t2.'<br>';
echo '$t3 = '.$t3.'<br>';
echo '$t4 = '.$t4.'<br>';
echo '$t5 = '.$t5.'<br>';
echo '$t6 = '.$t6.'<br>';

結果:

$t1 = This is a 999-999- test Sammy hello 
$t2 = This is a 999-999- test Sammy hello 
$t3 = This -is* a b 9-9-9 * 8 test 4 *#Samy! # helo !
$t4 = This,----------is********,a,bbbb,999-999-9999,********,8888888888,test,4444444444,********##########Sammy!!!!!!,######,hello,!!!!!!
$t5 = Thisisabbbb99999999998888888888test4444444444Sammyhello
$t6 = ThisisabbbbtestSammyhello

望ましい出力は次のようになります。

This ---is*** a bbbb 999-999-9999 *** 8888888888 test 4444444444 ***###Sammy!!! ### hello !!!

ご覧のとおり、目的の出力では数字だけが残され、3 つの文字の繰り返しのみが残されます。つまり、 --- ### * !!! です。

可能であれば、例外を 3 から他の整数に変更できるようにしたいと考えています。

前もって感謝します。

4

2 に答える 2

3

これはそれを行います:

preg_replace('/(([^\d])\2\2)\2+/', '$1', $str);

[^\d]数字ではない単一の文字に一致します。
\2キャプチャされた数字
$1を参照します。最初にキャプチャされたグループを参照します。これは最初の3つの繰り返し文字になるため、余分な文字\2+は削除されます。

コードパッド

于 2012-05-25T21:48:52.340 に答える
0

探している正規表現:/((.)\2{2})\2*/ 例外が必要な場合は、中括弧をn入れてください:n-1{n-1}/((.)\2{n-1})\2*/

編集:非番号またはあなたが何をしている場合でも.、たとえば他のものに置き換えます[^\d]/(([^\d])\2{2})\2*/

于 2012-05-25T21:56:52.413 に答える