タイトルが正しいかどうかわからないので、重複していたらすみません。
私の理解では、または のいずれかに(a|b)
一致します。これは、単語の文字またはのいずれかに一致するように拡張できます。a
b
([\w]|@)
@
私の質問は、なぜこれが量指定子で機能しないのですか? 限定文字セットまたは単一の を一致させようとして@
い([\w\.\-]*|@)
ますが、一致しません@
。
この動作の原因と、これを行う正しい方法を説明できる人はいますか?
*
「ゼロ以上に一致する」という意味です。したがって、パターンの最初の部分は何にも一致しません(空の文字列)。最初の部分は常に成功するため、2番目の部分を試行することはありません。
これを解決するには、次の2つのオプションがあります。
+
少なくとも1つの文字を要求するために使用します。([\w\.\-]+|@)
@
:(@|[\w\.\-]*)
。これは、空の文字列を一致させたいが、空の文字列@
が存在する場合は一致させたい場合に便利です。更新: Linuxiosは、Rubyが*
サブパターン内で許可しないことを示唆しています。私はRubyユーザーではありませんが、それが当てはまる場合は、次のようなオプション2と同等のものを入手できます。
(@|[\w\.\-]+)?
Rubyでは、またはに変数の数量詞を含めることはできません。これは、常に一致するものがないため、またはが無意味になるためです。