我希望使用Groovy正则表达式来匹配罗马数字(我没有在Java中尝试过,但应该是相同的)。 我在这个网站上找到了一个答案,其中有人建议使用以下正则表达式:
/M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})/
问题在于在Groovy中,像
/V?I{0,3}/
这样的表达式不是贪婪的。所以对于字符串"Book number VII",匹配器/V?I{0,3}/
返回的是"V",而不是期望的"VII"。显然,如果我们使用模式
/VI+/
,那么我们会得到匹配"VII"...但是如果字符串是"Book number V",这种解决方案就无效了,因为我们将得不到任何匹配...我试图通过使用贪婪量词
/VI{0,3}+/
或者/VI*+/
来强制捕获最大字符,但我仍然得到了"V"而不是"VII"的匹配。有什么想法吗?
?
是贪婪模式,但是{n,m}
不是? - Bart Kiers[MCDXLIV]+
这样的东西怎么样? - Tony Ennis