我有一个正则表达式
(IX|IV|V?I{0,3}|M{1,4}|CM|CD|D?C{1,3}|XC|XL|L?X{1,3})
我用它来检测文本中是否存在罗马数字。
eregi("( IX|IV|V?I{0,3}[\.]| M{1,4}[\.]| CM|CD|D?C{1,3}[\.]| XC|XL|L?X{1,3}[\.])", $title, $regs)
但是罗马数字的格式始终是这样的:“IV。”...我已经在eregi示例中添加了数字前的空格和数字后的“。”,但我仍然得到相同的结果。如果文本是像“somethinvianyyhing”这样的东西,则结果将是vi(在两者之间)...
我做错了什么?
/\b([ivxldcm]+)\b/i
,然后检查Roman::isroman($1)
是否返回true。否则,您将得到错误的答案。它仅适用于ASCII,这意味着它只能达到4000。最长的合法字符串是MMMDCCCLXXXVIII
。使用Unicode,您可以使用更大的罗马数字,例如10,000的ↂ和上划线表示基字符的1000倍。我有一个处理所有这些的模块,但当然它是用Perl编写的。☺ - tchrist