我想使用 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 中,like 表达式并不贪心。因此,对于像“Book number VII”这样的字符串,匹配器/V?I{0,3}/
返回“V”而不是“VII”,因为它是期望的。
显然,如果我们使用该模式/VI+/
,那么我们确实会得到匹配“VII”......但如果字符串类似于“Book number V”,则此解决方案无效,因为我们不会得到匹配......
我试图通过使用贪婪的量词来强制捕获最大字符,/VI{0,3}+/
但/VI*+/
我仍然得到匹配“V”而不是“VII”
有任何想法吗?