私は正規表現を作成しようとしています。これにより、大文字と小文字の文字 + 数字 - a-zA-z0-9と文字を使用して文字列を作成できます。.-_
そのような正規表現を作成するにはどうすればよいですか?
次の正規表現は、探しているものである必要があります (以下の説明)。
\A[-\w.]*\z
次の文字クラスは、許可する文字のみに一致する必要があります。
[-a-zA-z0-9_.]
\wは と同等であるため、これを次のように短縮できます[a-zA-z0-9_]。
[-\w.]
文字クラスにリテラルを含めるには、-最初の文字である必要があることに注意してください。そうしないと、範囲として解釈されます (たとえば、[a-d]は と同等です[abcd])。もう 1 つのオプションは、バックスラッシュでエスケープすることです。
通常.、改行以外の任意の文字を意味し、リテラルのピリオドに一致するようにエスケープする必要がありますが、これは文字クラス内では必要ありません。
\Aとは、文字列の先頭と末尾へのアンカーです。それ以外の場合は、許可された文字のみ\zを含む文字列ではなく、許可された文字のいずれかを含む文字列と一致します。
は*0 個以上の文字を意味します。1 つ以上の文字が必要な場合は、 を に変更し*ます+。
/\A[\w\-\.]+\z/
\w英数字 (大文字と小文字を区別しない) と "_" を意味します\-ダッシュを意味します\.期間を意味します\A始まりを意味する (よりも「強い」^)\z終わりを意味する (よりも「強い」$)例えば:
>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/
=> 0 # this means a match
改善のための更新ありがとうphrogz