2011-01-18 8 views
4

PHPでpreg_replaceを使用して関数を記述しようとしていますが、リスト内に見つからないすべての文字が置き換えられます。通常、私たちは見つけた場所を置き換えますが、これは異なっています。私は、文字列があればPHPのpreg_replace - NOT条件の正規表現

例えば:

$mystring = "ab2c4d"; 

を私は*ですべての数字を置き換えます次の関数記述することができます。

preg_replace("/(\d+)/","*",$mystring); 

をしかし、私はどちらもありませんこれらの文字を置き換えたいですaからzまでのアルファベットも数字でもありません。 #$ *();〜!{} [] | \ /。、<>? 'のようなものです。等。

数字とアルファベット以外は何か別のものに置き換えてください。それ、どうやったら出来るの?

おかげ

答えて

13

は、あなたが使用することができます試してみてくださいnegated character class(クラスの先頭に^を使用して):

/[^\da-z]+/i 

アップデート:私は意味、あなたは持っていますには無効な文字クラスを使用します。は私が提供したものを使用しますが、他にもあります)

+0

偉大な私はこれを使用し、それは働いた。 – Ali

3

preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring); 
2

\Wはアルファベット以外の文字と一致します。アンダースコア_は英数字のリストに含まれているため、ここでも一致しません。

preg_replace("/\W/", "something else", $mystring); 

は、アンダースコアが置き換えられていない状態でも使用できます。できない場合は、

preg_replace("/[\W_]/", "something else", $mystring); 
+0

2番目の正規表現はアンダースコアを置き換えません。代わりにpreg_replace( "/ [\ W _] /"、 "*"、$ mystring)を使用する必要があります。 – Soumya

+0

@ Soumya92:私もそれに気づきました。あまりにも速く投稿する、後で編集する:) –

1

正規表現の\d\wなどはすべて同じ文字の大文字のバージョンである負のバージョンです。

したがって\wは任意の単語文字(つまり、基本的に英数字)と一致します。したがって、\Wは、単語文字以外はすべて英数字以外のものと一致します。

これはあなたの後のように聞こえる。

詳細については、regular-expressions.infoをお勧めします。