1

正規表現を理解しようとしていますが、これを理解できないようです。

preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);

上記の例では「スルー」としてカウントされるため、これはダッシュを置き換えないと思いました。しかし、実行するたびにダッシュが削除されます。

4

1 に答える 1

5

サンプル値を提供していません$mystring。これは役に立ちます。

書かれているように、この正規表現は の 1 つの文字のみを置き換え$mystringます。具体的には、文字クラスの先頭にカラット文字 ( ^) が含まれています。Perl 互換の正規表現エンジン (PHP はその 1 つです) では、これはこれらのことを示しません(詳細については、文字クラスを参照してください)。したがって、あなたの式は本質的にそうでないものをすべて取り除いています:

  • a と z の間の小文字
  • A と Z の間の大文字
  • 0 から 9 までの数字
  • ピリオド
  • クエスチョンマーク
  • 感嘆符
  • 空白文字

ダッシュ文字は上記のいずれでもないため、一致して置換されます。

ただし、あなたが書いたダッシュの「スルー」ネスについてのあなたの仮定は正しいです。ダッシュ文字は、文字クラスの 4 つの特殊文字の 1 つで、文字の範囲を示すために使用されます。

于 2013-02-17T03:27:13.703 に答える