-4

この if 条件:

if (preg_match('/^[a-zA-Z_]+\z/', $network_path)) 

次のような文字列をスキップします: bla-bla-bla-bla

上記のような文字列を受け入れるように、この正規表現を改善するにはどうすればよいですか?

4

3 に答える 3

2

これ[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))
于 2012-04-18T11:07:07.830 に答える
1

(PHPの人ではないので、ymmvですが...)

[] 内の文字は、ほとんどの perl 互換正規表現エンジンによって文字クラスとして扱われます。文字クラスは、そのクラス内から 1 つ以上の文字を受け入れる + のような修飾子に従うことができます。したがって、文字クラス内にダッシュを追加するだけで、探しているものが得られるはずです (少なくとも、Ruby ではそうです!)。

于 2012-04-18T11:09:42.727 に答える
1
if (preg_match('/^[-a-zA-Z_]+\z/', $network_path)) 
于 2012-04-18T10:59:26.437 に答える