2

次のような文字列を取得しようとしています。

$search = "ボブ・ロブロー + マーク・ハミル RT45_part12 foo_092344"

アンダースコアがRT45_part12にある場合を除き、英数字以外の文字をすべて削除します。

私が望む結果は次のとおりです。

「ボブ・ロブロー マーク・ハミル RT45_part12 foo 092344」

preg_replace("/[^A-Za-z0-9_]/", ' ', $search)

RT45_part12 を見つけるための正規表現は

\b[a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5}\b

RT45_part12 にあるアンダースコアをスキップして、デリックの後のアンダースコアを置き換えるように、これら 2 つを組み合わせる方法がわかりません。先読み、後読み機能を使用する必要がありますか?

4

2 に答える 2

0

それは十分な制限ですか?

echo preg_replace ( "~[^\w ]++|_(?!part\d{1,5}\b)~i", " ", $mystring);

しかし、確実にしたい場合は、それを使用してください:

echo preg_replace ( "~[^\w ]++|(\b[a-z]{2,4}\d{1,5}_part\d{1,5}\b)|_~i", "$1 ", $mystring);
于 2013-04-24T02:29:07.780 に答える
0

この助けを願っています

$search = "Bob Loblaw + Mark Hamill RT45_part12 foo_092_34_4";

echo preg_replace("/[^a-zA-Z0-9 ]|(RT45_part12)/", '$1', $search);

//Bob Loblaw  Mark Hamill RT45_part12 foo092344

また

echo preg_replace("/[^a-zA-Z0-9 ]|([a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5})/", '$1', $search);

更新 (英数字以外の文字をスペースに) (RT45_part12 の後にスペースがある場合にのみ機能します)

echo preg_replace("/[^a-zA-Z0-9 ]|([a-zA-Z]{2,4}[0-9]{1,5}_part[0-9]{1,5}) /", '$1 ', $search);
于 2013-04-24T02:53:30.973 に答える