4

私は正規表現を作成しようとしています。これにより、大文字と小文字の文字 + 数字 - a-zA-z0-9と文字を使用して文字列を作成できます。.-_

そのような正規表現を作成するにはどうすればよいですか?

4

2 に答える 2

12

次の正規表現は、探しているものである必要があります (以下の説明)。

\A[-\w.]*\z

次の文字クラスは、許可する文字のみに一致する必要があります。

[-a-zA-z0-9_.]

\wは と同等であるため、これを次のように短縮できます[a-zA-z0-9_]

[-\w.]

文字クラスにリテラルを含めるには、-最初の文字である必要があることに注意してください。そうしないと、範囲として解釈されます (たとえば、[a-d]は と同等です[abcd])。もう 1 つのオプションは、バックスラッシュでエスケープすることです。

通常.、改行以外の任意の文字を意味し、リテラルのピリオドに一致するようにエスケープする必要がありますが、これは文字クラス内では必要ありません。

\Aとは、文字列の先頭と末尾へのアンカーです。それ以外の場合は、許可された文字のみ\zを含む文字列ではなく、許可された文字のいずれかを含む文字列と一致します。

*0 個以上の文字を意味します。1 つ以上の文字が必要な場合は、 を に変更し*ます+

于 2012-05-16T22:49:09.530 に答える
4

/\A[\w\-\.]+\z/

  • \w英数字 (大文字と小文字を区別しない) と "_" を意味します
  • \-ダッシュを意味します
  • \.期間を意味します
  • \A始まりを意味する (よりも「強い」^)
  • \z終わりを意味する (よりも「強い」$)

例えば:

>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/
=> 0 # this means a match

改善のための更新ありがとうphrogz

于 2012-05-16T22:43:18.577 に答える