0

申し訳ありませんが、正規表現を理解したことがありません。

スペースを除いて、文字列から英数字以外のもの(製品名から、アンパサンドが含まれているものもあります)を削除する必要があります。

これまでのところ、これがあります(別のスタックオーバーフローの投稿から見つかりました):

$productname = preg_replace("~[\W]~","",$product['name']);

これで、英数字がすべて "" に置き換えられます。現在すべてのスペースを削除しているため、スペースを除外したいことを除いて、これは問題ありません。また、チルダ ( ~) が正規表現で何をするのかどこにも見つかりません。

スペースに関しては、によって達成される否定的な先読み?!があることがわかりましたが、それを上記に組み込む方法はわかりません。

4

2 に答える 2

6

また、チルダ (~) が正規表現で何をするのかどこにも見つかりません。

通常、PHP の正規表現は一連の区切り文字で囲まれて~いますが、ドキュメントに記載されているいくつかの文字を除いて、英数字以外の任意の文字を使用できます。

英数字以外のスペースを除外する場合は、次のようにします。

~[^a-zA-Z0-9\s]+~
  • ^文字クラスの内部では、文字クラス[]が内部で言及されていないものと[^a]一致しaます。
  • a-z小文字を合わせます。
  • A-Z大文字と一致します。
  • 0-9数字を合わせます。
  • \sスペース文字に一致します。
  • ^前のクラスを、言及されたもの以外のすべてに一致させます。
  • +文字クラスの後に、文字クラスで言及されていない 1 つ以上の文字に文字クラスを一致させます。

\Walone は単語以外の文字と一致します。単語の文字とは何ですか?

単語の文字は通常、任意の文字(小文字、大文字)、数字、またはアンダースコア_です。

単語文字\w (小さいw)は通常、この文字クラス[a-zA-Z0-9_] と同じです。

\W (big W)は単語以外の文字に一致するため、スペースを含む一致以外のものに\w一致するため、スペースも削除されます。

于 2013-11-04T14:41:33.753 に答える
0

クラスブロックで単純な否定を行うことができます

$productname = preg_replace("#[^A-Za-z0-9]+#","",$product['name']);

英数字以外はすべて "" に置き換えられます

于 2013-11-04T14:37:30.007 に答える