Соответствующие римские номера

У меня регулярное выражение

(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 (между обоими) …

Что я делаю не так?

    Related of "Соответствующие римские номера"

    У вас нет места перед VI пространство всегда принадлежит альтернативе до того, как оно будет написано, а не всем. То же самое для \. он всегда относится к альтернативе, где он был написан.

    Попробуй это

     " (IX|IV|V?I{0,3}|M{1,4}|CM|CD|D?C{1,3}|XC|XL|L?X{1,3})\." 

    См. Здесь, в Regexr

    Это будет соответствовать

    Я.
    II.
    III.
    Внутривенно
    V.
    VI.
    VII.
    VIII.
    IX.
    ИКС.

    Но нет

    XI. MMI. MMXI.
    somethinvianyyhing

    Ваш подход к сопоставлению римских чисел далеко не правильный , подход к соответствию римским номерам более правильный, это число для чисел до 50 (L)

     ^(?:XL|L|L?(?:IX|X{1,3}|X{0,3}(?:IX|IV|V|V?I{1,3})))$ 

    См. Здесь, в Regexr

    Я тестировал это только на поверхности, но вы видите, что это действительно будет сложным, и в этом выражении C, D и M все еще отсутствуют.

    Не говорить о особых случаях, например, 4 = IV = IIII, и их больше.

    Википедия о римских цифрах