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