2012-03-23 15 views
0

アルファベットの文字、ドット(。)、カンマのみを含むように文字列を変更する必要があります。 (。)文字列はAZ、AZ、0-9、ドット以外の文字が含まれている場合 、それらはカンマ記号に置き換える必要があり、私はこれを使用しています:正規表現(php) - 英数字以外の文字のブロックと一致する

$string = "dycloro 987 stackOVERflow !|,!!friday"; 
$newstring = preg_replace('/[^a-zA-Z0-9\.]/', ',', $string); 

この戻り、

dycloro、987、StackOverflowの,,,,,,金曜日

しかし、私は代わりに以下を得るために必要としてです。

dycloro、987、StackOverflowの、金曜日

(注意 "|!、!!" $文字列内の部分が単一のコンマ記号に置き換えられます)。 理想的には、許可されていない文字のブロックを1つのコンマ記号で置き換えたいとします。 $newstring = preg_replace('/,{2,}/', ',', $newstring);は、複数のカンマ記号を1つのカンマで置き換えていることが分かりました。しかし、もっと速く、より良い方法でこれを行う方法はありますか? 1つの正規表現の一致でこれを行うにはどうすればよいですか? と処理時間やメモリの違いはありますか?これは正規表現が数MBのユーザー入力に対して実行されるため、私はそれについても興味があります。

ありがとうございました!

+1

は、あなたがしようとしているお試しください: '$をnewstring =にpreg_replace( '/ [^-ZA-Z0-9 \] + /'、 ''、$文字列); ' – piotrekkr

+1

ruakhが正しいです。 RTFM! – Benubird

答えて

2

ただ、文字クラスの後に、「私は今述べたものの一つ以上」を意味する、プラス記号+を追加します。

$string = "dycloro 987 stackOVERflow !|,!!friday"; 
$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string); 

http://www.php.net/manual/en/regexp.reference.repetition.phpを参照してください。

+0

それは魅力的に機能しました!どうもありがとうございました!!! –

2

はこの1

$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string); 
+0

ありがとう!これは実際にはruakhの提案と同じですが、投稿に数秒の差があります。どうもありがとうございました! –

関連する問題