Регулярные выражения

Автор VlhOwn, 29 августа 2010, 01:50

0 Пользователи и 1 гость просматривают эту тему.

VlhOwn

С моей точки зрения регулярное выражение (m*)(d?c{0,3}|c[dm])(l?x{0,3}|x[lc])(v?i{0,3}|i[vx]) должно описывать любое число записанное римскими цифрами, причем выделенные подобразцы задают соответственно тысячи, сотни, десятки и единицы.
И действительно, при сопоставлении образца ^(m*)(d?c{0,3}|c[dm])(l?x{0,3}|x[lc])(v?i{0,3}|i[vx])$ (обращаю внимание на ^...$, т.е. число есть строка целиком) со строкой "mmmccxcvii" (3297) все отлично, и мы получаем соответственно mmm, cc, xc и vii.
Но стоит убрать символы начала (^) и конца ($) строки и сопоставить образец (m*)(d?c{0,3}|c[dm])(l?x{0,3}|x[lc])(v?i{0,3}|i[vx]) со строкой вида "123 mmmccxcvii 456", например, совпадения нет вообще.
В чем заковыка?


dr.Faust

У меня два совпадения:
123 mmmccxcvii 456
123 mmmccxcvii 456

Ubuntu 10.04
320m18 (9502)
Свобода информации - свобода личности!

dr.Faust

А более "оптимистичная" маска (m*)(c[dm]|d?c{0,3})(x[lc]|l?x{0,3})(i[vx]|v?i{0,3}) оказывается более жадной и ищет правильно!
Свобода информации - свобода личности!

VlhOwn

хм... ООО и у меня ищет и находит, а javascript не находит