私は正規表現を作成しようとしています。これにより、大文字と小文字の文字 + 数字 - 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