この if 条件:
if (preg_match('/^[a-zA-Z_]+\z/', $network_path))
次のような文字列をスキップします: bla-bla-bla-bla
上記のような文字列を受け入れるように、この正規表現を改善するにはどうすればよいですか?
これ[a-zA-Z_]
は文字クラスです。この構成は、角括弧内に定義されている文字の1文字と一致します。
したがって、このクラスはaからz、AからZ、およびアンダースコアに一致します。ダッシュも一致させたい場合は、それをクラスに追加するだけです。ただし-
、これは文字クラス内の特殊文字であることに注意してください。文字通り一致させたい場合は、エスケープするか、クラスの最初または最後に配置する必要があります。
if (preg_match('/^[-a-zA-Z_]+\z/', $network_path))
また
if (preg_match('/^[a-zA-Z_-]+\z/', $network_path))
また
if (preg_match('/^[a-zA-Z\-_]+\z/', $network_path))
(PHPの人ではないので、ymmvですが...)
[] 内の文字は、ほとんどの perl 互換正規表現エンジンによって文字クラスとして扱われます。文字クラスは、そのクラス内から 1 つ以上の文字を受け入れる + のような修飾子に従うことができます。したがって、文字クラス内にダッシュを追加するだけで、探しているものが得られるはずです (少なくとも、Ruby ではそうです!)。
if (preg_match('/^[-a-zA-Z_]+\z/', $network_path))