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

  • Автор темы Автор темы ibred
  • Дата начала Дата начала

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Реакции
3 564
Баллы
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/thre...e-i-ne-rabotaet-v-shablone.28761/#post-206712
 
Последнее редактирование:
Выкрутился такой регуляркой:
Код:
Развернуть Свернуть Копировать
\d+(?=;([^;]*;){5}(\s|$))

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

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

попробуй так в зенно
Опять же спасибо за вариант :-) но меня не другое решение интересует - с ним проблем нет, а объяснение, почему "там" работает, а "здесь" нет.
Наверное, нужно было тему в багах создавать :-)
 
Но главная загвоздка была не в составлении регулярного выражения, а понимании того, почему регулярка из первого поста КОРРЕКТНО работает в конструкторе и НЕ РАБОТАЕТ в проекте.
Думаю, с этим связано http://zennolab.com/discussion/thre...rabotaet-v-konstruktore-reg-vyrazhenie.28627/
 
Зачем так сложно????!!!!

^\d+

В конструкторе будет брать только одну строку, но в шаблоне будет работать корректно.
 
Почитал тему. Что-то общее есть, но при этом там обратная ситуация, - не работает в конструкторе и работает в проекте.
Зачем так сложно????!!!!

^\d+

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

UPDATE: Хм, а вот такой вариант работает: (?m)^\d+
 
Количество цифр всегда разное.
Варианты хорошие, спасибо! :-)

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

Опять же спасибо за вариант :-) но меня не другое решение интересует - с ним проблем нет, а объяснение, почему "там" работает, а "здесь" нет.
Наверное, нужно было тему в багах создавать :-)
ты скажи мой вариант работает? если да, мб я смогу объяснить почему так. Потому что мой вариант - слегка модифицированный твой
 
ты скажи мой вариант работает? если да, мб я смогу объяснить почему так. Потому что мой вариант - слегка модифицированный твой
Не проверял, но думаю, что работает так как этот вариант фактически аналогичен регулярке из второго поста.
Выкрутился такой регуляркой:
Код:
Развернуть Свернуть Копировать
\d+(?=;([^;]*;){5}(\s|$))
 
зеннопостер почему-то считает, что конец строки находится после кареток конца строки и перевода на новую. не знаю, правильно ли это или нет, но так он думает
 
  • Оценить
Реакции: ibred
зеннопостер почему-то считает, что конец строки находится после кареток конца строки и перевода на новую. не знаю, правильно ли это или нет, но так он думает
Тоже к этой мысли пришел.
Просто неудобно, что расхождения есть, в одном и другом месте должно быть идентично, раз это все в рамках Zennoposter. А то вроде все круто (в конструкторе проверил, успех), а после запуска проекта удивляешься почему данные неполные собираются :-) Хотелось бы, конечно, прочитать комментарий на этот счет кого-нибудь из администрации VladZ или rostonix.
 

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