Groovy 正規表現を使用してローマ数字を一致させたい (Java でこれを試したことはありませんが、同じはずです)。このウェブサイトで、誰かが次の正規表現を提案した回答を見つけました。
/M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})/
問題は/V?I{0,3}/
、Groovy では のような式が貪欲ではないことです。そのため、"Book number VII" のような文字列の場合、マッチャー/V?I{0,3}/
は必要に応じて "VII" ではなく "V" を返します。
明らかに、パターンを使用する/VI+/
と、一致する "VII" が得られます...しかし、文字列が "Book number V" のようなものである場合、一致するものが得られないため、この解決策は有効ではありません...
貪欲な量指定子を使用して最大の文字キャッチを強制しようとしましたが、/VI{0,3}+/
それでも/VI*+/
「VII」よりも「V」の方が一致します。
何か案は?