4
我的正則表達式匹配羅馬數字
(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)
但羅馬數字的格式始終是這樣的:「四」 ......我在eregi例如空格加號之前和「」數字後,但我仍然得到相同的結果。如果文本是像「somethinvianyyhing」的結果將是六(兩者之間)...
我做錯了什麼?
同樣在SO:http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression – kapa
我糾正我的解決方案和Regexr鏈接。 – stema
有一個Perl模塊可以正確處理羅馬數字。知道你有一個方法是先*匹配'/ \ b([ivxldcm] +)\ b/i'然後*然後*檢查'Roman :: isroman($ 1)'是否返回true。否則你會得到錯誤的答案。它只能用於ASCII,這意味着它只能達到4000.最長的這種合法字符串是'MMMDCCCLXXXVIII'。使用Unicode,你可以高得多,因爲你有更大的羅馬數字,例如ↂ爲10,000 *&c *,而且你也可以使用macron或overline來獲得1000倍的基本字符。我有一個模塊可以處理所有這些,但它當然是用Perl編寫的 – tchrist