2011-07-24 12 views
3

文字列の1つまたは2つの文字を置き換えようとしています。この正規表現を検討してくださいRegexが1つまたは2つの文字の単語を置き換えます

$str = 'I haven\'t got much time to spend!'; 
echo preg_replace('/\b([a-z0-9]{1,2})\b/i','',$str); 

returns: haven' got much time spend! 
expected output: haven't got much time spend! 

私の目標は、文字列から任意の1文字または2文字の長さの単語を削除することです。英数字または特殊文字を使用できます。

+0

文字列 'foo a、bb、bar:cc zz 'はどうなりますか? – Qtax

答えて

5

使用前後参照:

preg_replace('/(?<!\S)\S{1,2}(?!\S)/', '', $str) 

Altho単語が削除されたとき、これは二重の空白を残します。ただ、使用

preg_replace('/\s+\S{1,2}(?!\S)|(?<!\S)\S{1,2}\s+/', '', $str) 
+0

ちょうどそれに気づいた:) – Maximus

+1

ええ!私たちはまったく同じソリューションになりました!私はこれが最高だと思う、今までの他の作品はないと思う。 – TMS

3

echo preg_replace('/(?<!\S)\S{1,2}(?!\S)/i', '', 'a dljlj-b2 adl xy zq a'); 

たかったように、出力は次のとおりです。

dljlj-b2 adl 

だから開始/終了を処理することを忘れないでくださいまた、あなたのような何かを試みることができるスペースを削除するにはネガティブアサーションで文字列を返します。

+0

5分で打ち切り、 '/ i' ;-)の必要はない – Qtax

+0

;-) URが良い:-) – TMS

関連する問題