5

次のような文字列内の任意のタイプの特殊文字を削除したいと思います。

This is, ,,, *&% a ::; demo +  String.  +
Need to**@!/// format:::::
 !!! this.`

必要な出力:

This is a demo String Need to format this

REGEXを使用してこれを行う方法は?

4

4 に答える 4

15

数字や文字以外の文字が繰り返されていないか確認し、スペースを入れて繰り返します。

# string(41) "This is a demo String Need to format this"
$str = trim( preg_replace( "/[^0-9a-z]+/i", " ", $str ) );

デモ: http://codepad.org/hXu6skTc

/ # パターンの開始を示す
[ # 文字クラスの開始を示す
 ^ # ない、または負
 0-9 # 0 から 9 までの数字 (または、^
 az # a から z までの文字 (または、^0-9 のため「文字でも数字でもない」
] # 文字クラスの終わりを示す
+ # 文字クラス一致の 1 つ以上のインスタンスに一致
/ # パターンの終わりを示す
i # 大文字と小文字は区別されません。az は AZ も意味します
于 2012-05-30T05:48:51.243 に答える
4

使用する:

preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);

文字がアルファベット、数字、またはスペースでない場合は、空の文字列に置き換えられます。

例:

$yourString = 'This is, ,,, *&% a ::; demo +  String.  + Need to**@!/// format::::: !!! this.`';
$newStr = preg_replace('#[^a-zA-Z0-9 ]#', '', $yourString);
echo $newStr;

結果:

This is a demo String Need to format this

したがって、必要に応じて、次の文字を追加することで、より多くの文字を許可できます。

[^a-zA-Z0-9 ]

注:また、単語間に複数のスペースを許可したくない場合(ただし、ブラウザーでの出力時には表示されません)、代わりにこれを使用する必要があります。

preg_replace('#[^a-zA-Z0-9]+#', ' ', $yourString);
于 2012-05-30T05:41:30.857 に答える
2
$string = preg_replace('/[^a-z]+/i', ' ', $string);

また、キャラクタークラスで、次のように'接続詞を使用できるようにすることもできます。don'tdon t

$string = preg_replace('/[^a-z\']+/i', ' ', $string);

後でそれをトリミングして、先頭と末尾の空白を削除することもできます。

$string = trim(preg_replace('/[^a-z\']+/i', ' ', $string));
于 2012-05-30T05:44:30.063 に答える
2
echo preg_replace('/[^a-z]+/i', ' ', $str); 
// This is a demo String Need to format this 
于 2012-05-30T05:44:42.737 に答える