0

タイトルが正しいかどうかわからないので、重複していたらすみません。

私の理解では、または のいずれかに(a|b)一致します。これは、単語の文字またはのいずれかに一致するように拡張できます。ab([\w]|@)@

私の質問は、なぜこれが量指定子で機能しないのですか? 限定文字セットまたは単一の を一致させようとして@([\w\.\-]*|@)ますが、一致しません@

この動作の原因と、これを行う正しい方法を説明できる人はいますか?

4

2 に答える 2

3

*「ゼロ以上に一致する」という意味です。したがって、パターンの最初の部分は何にも一致しません(空の文字列)。最初の部分は常に成功するため、2番目の部分を試行することはありません。

これを解決するには、次の2つのオプションがあります。

  1. +少なくとも1つの文字を要求するために使用します。([\w\.\-]+|@)
  2. 最初に置く@(@|[\w\.\-]*)。これは、空の文字列を一致させたいが、空の文字列@が存在する場合は一致させたい場合に便利です。

更新: Linuxiosは、Rubyが*サブパターン内で許可しないことを示唆しています。私はRubyユーザーではありませんが、それが当てはまる場合は、次のようなオプション2と同等のものを入手できます。

(@|[\w\.\-]+)?
于 2013-02-20T14:36:40.910 に答える
1

Rubyでは、またはに変数の数量詞を含めることはできません。これは、常に一致するものがないため、またはが無意味になるためです

于 2013-02-20T14:36:41.173 に答える