正規表現を理解しようとしていますが、これを理解できないようです。
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
上記の例では「スルー」としてカウントされるため、これはダッシュを置き換えないと思いました。しかし、実行するたびにダッシュが削除されます。
正規表現を理解しようとしていますが、これを理解できないようです。
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
上記の例では「スルー」としてカウントされるため、これはダッシュを置き換えないと思いました。しかし、実行するたびにダッシュが削除されます。
サンプル値を提供していません$mystring
。これは役に立ちます。
書かれているように、この正規表現は の 1 つの文字のみを置き換え$mystring
ます。具体的には、文字クラスの先頭にカラット文字 ( ^
) が含まれています。Perl 互換の正規表現エンジン (PHP はその 1 つです) では、これはこれらのことを示しません(詳細については、文字クラスを参照してください)。したがって、あなたの式は本質的にそうでないものをすべて取り除いています:
ダッシュ文字は上記のいずれでもないため、一致して置換されます。
ただし、あなたが書いたダッシュの「スルー」ネスについてのあなたの仮定は正しいです。ダッシュ文字は、文字クラスの 4 つの特殊文字の 1 つで、文字の範囲を示すために使用されます。