Регулярка. Работает в конструкторе и не работает в шаблоне.

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
Есть текст:
Код:
100542;1;3.1.1994;1;1;6;
200542;1;;1;;6;
300542;;;;;;
400542;1;;1;;;
Необходимо получить первые цифры с каждой строки, т.е.:
Код:
100542
200542
300542
400542
Состряпал регулярку:
Код:
(?m)\d+(?=;([^;]*;){5}$)
Прекрасно работает в конструкторе регулярных выражений и не работает в шаблоне.
В шаблоне регулярное выражение берет только последнюю строку: 400542

То есть почему-то игнорируется модификатор (?m)

EDIT: Проблемным оказался не модификатор, а возврат каретки.
http://zennolab.com/discussion/threads/reguljarka-rabotaet-v-konstruktore-i-ne-rabotaet-v-shablone.28761/#post-206712
 
Последнее редактирование:

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
Выкрутился такой регуляркой:
Код:
\d+(?=;([^;]*;){5}(\s|$))
Но все равно хотелось бы понять почему не работает первый пример.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 107
Баллы
113
Варианты
Код:
(?<=(^|\n)).*?(?=;)
(?<=(^|\n))\d+
Если цифр всегда 6
Код:
\d{6}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 618
Благодарностей
4 606
Баллы
113
(?m)\d+(?=;([^;]*;-){5}\r?\n?$)

попробуй так в зенно
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
Варианты
Код:
(?<=(^|\n)).*?(?=;)
(?<=(^|\n))\d+
Если цифр всегда 6
Код:
\d{6}
Количество цифр всегда разное.
Варианты хорошие, спасибо! :-)

Но главная загвоздка была не в составлении регулярного выражения, а понимании того, почему регулярка из первого поста КОРРЕКТНО работает в конструкторе и НЕ РАБОТАЕТ в проекте.
(?m)\d+(?=;([^;]*;-){5}\r?\n?$)

попробуй так в зенно
Опять же спасибо за вариант :-) но меня не другое решение интересует - с ним проблем нет, а объяснение, почему "там" работает, а "здесь" нет.
Наверное, нужно было тему в багах создавать :-)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 107
Баллы
113
Но главная загвоздка была не в составлении регулярного выражения, а понимании того, почему регулярка из первого поста КОРРЕКТНО работает в конструкторе и НЕ РАБОТАЕТ в проекте.
Думаю, с этим связано http://zennolab.com/discussion/threads/r-vozvrat-karetki-ne-rabotaet-v-konstruktore-reg-vyrazhenie.28627/
 

Санёк

Client
Регистрация
30.08.2013
Сообщения
325
Благодарностей
111
Баллы
43
Зачем так сложно????!!!!

^\d+

В конструкторе будет брать только одну строку, но в шаблоне будет работать корректно.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
Почитал тему. Что-то общее есть, но при этом там обратная ситуация, - не работает в конструкторе и работает в проекте.
Зачем так сложно????!!!!

^\d+

В конструкторе будет брать только одну строку, но в шаблоне будет работать корректно.
Оно не может работать корректно т.к. начало строки всегда одно, только если не используется модификатор (?m).
Я все равно проверил Вашу регулярку в проекте и она не работает, берется только первая строка, чего и следовало ожидать.

UPDATE: Хм, а вот такой вариант работает: (?m)^\d+
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 618
Благодарностей
4 606
Баллы
113
Количество цифр всегда разное.
Варианты хорошие, спасибо! :-)

Но главная загвоздка была не в составлении регулярного выражения, а понимании того, почему регулярка из первого поста КОРРЕКТНО работает в конструкторе и НЕ РАБОТАЕТ в проекте.

Опять же спасибо за вариант :-) но меня не другое решение интересует - с ним проблем нет, а объяснение, почему "там" работает, а "здесь" нет.
Наверное, нужно было тему в багах создавать :-)
ты скажи мой вариант работает? если да, мб я смогу объяснить почему так. Потому что мой вариант - слегка модифицированный твой
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
ты скажи мой вариант работает? если да, мб я смогу объяснить почему так. Потому что мой вариант - слегка модифицированный твой
Не проверял, но думаю, что работает так как этот вариант фактически аналогичен регулярке из второго поста.
Выкрутился такой регуляркой:
Код:
\d+(?=;([^;]*;){5}(\s|$))
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 618
Благодарностей
4 606
Баллы
113
зеннопостер почему-то считает, что конец строки находится после кареток конца строки и перевода на новую. не знаю, правильно ли это или нет, но так он думает
 
  • Спасибо
Реакции: ibred

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 546
Баллы
113
зеннопостер почему-то считает, что конец строки находится после кареток конца строки и перевода на новую. не знаю, правильно ли это или нет, но так он думает
Тоже к этой мысли пришел.
Просто неудобно, что расхождения есть, в одном и другом месте должно быть идентично, раз это все в рамках Zennoposter. А то вроде все круто (в конструкторе проверил, успех), а после запуска проекта удивляешься почему данные неполные собираются :-) Хотелось бы, конечно, прочитать комментарий на этот счет кого-нибудь из администрации VladZ или rostonix.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)