この可能な入力から、太字のテキストを一致させたい:
ジャンル:スリラー, アドベンチャー, アクション, 2012
ジャンル:スリラー, アドベンチャー, アクション
私はこのようなことをしました(?<=Genre: ).*(?=(, \d{4})?)
私の問題は、一致があるためこの時点で停止すること(, \d{4})?
を期待してこの部分を配置することですが、そうではなく、一致を無視するだけです...", 2012"
何かアドバイス?
.*
貪欲なので、可能な限り何でも消費します。数字を含む最後の部分はオプションであるため、すべてが によって消費されます.*
。
より雄弁な方法があるかもしれませんが、おそらく 2 つの正規表現があります。
(?<=Genre: ).*(?=(, \d{4}))|(?<=Genre: ).*
私が正しければ、最初のケースは数字の場合に一致しますが、それが失敗すると、より一般的なケースに移行します。
編集:実際には、次のようなことをするとうまくいくかもしれません:
(?<=Genre: ).*?(?=(, \d{4})|$)
そうすれば.*
貪欲ではありませんが、数字または文字列の末尾まですべてを消費する必要があります。