[Решено] Не работают некоторые регулярные выражения в Rules

Главные вкладки

Аватар пользователя Nicebit Nicebit 4 декабря 2013 в 17:35

Делаю правила в Rules, в условии использую регулярные выражения. Пишу регулярное выражение (проверяю в программе The Regex Coach), вставляю в Друпал. Но, в некоторых случаях, регулярные выражения не работают.

Пример: Нужно определить, что сперва идёт название города, а потом ещё несколько городов, разделённых тире
Текст: Колпашево - Большеустьикинское - Кондопога - Бай-Тайгинский - Красные Баррикады - Кяхулай - Ачинск - Гурьевск - Кашира - Дрожжановский -
Рабочее регулярное выражение: Колпашево \-[^\-]{1,30}\-
Нерабочее регулярное выражение: Колпашево \-[^\-]{1,30}\-[^\-]{1,30}\-
В первом случае правило срабатывает, но я хочу убедиться, что в тексте несколько городов через тире. Поэтому повторяю последнюю часть регулярного выражения, и оно перестаёт срабатывать.

Ещё один раз тоже вроде проблема была с символьными классами, но там извернулся без них.
Что не так?

Решение: опытным путём вышел на то, что 1 кирилический символ в UTF-8 равен двум байтам (собственно потом нашёл этому подтверждение). Поэтому просто нужно было увеличить максимальное число в квантификаторе.

Комментарии

Аватар пользователя deb deb 5 декабря 2013 в 10:30

"Nicebit" wrote:
Делаю правила в Rules, в условии использую регулярные выражения.

Не используйте регулярные выражения.

Аватар пользователя Nicebit Nicebit 5 декабря 2013 в 13:45

deb wrote:
"Nicebit" wrote:
Делаю правила в Rules, в условии использую регулярные выражения.

Не используйте регулярные выражения.

А как тогда делать условия?

Аватар пользователя Nicebit Nicebit 6 декабря 2013 в 8:52

deb, про php забыл чё-то. ) С его помощью нашёл свою ошибку (дописал в основной топик).
За explode спасибо, но я описал лишь маленькую часть задачи, поэтому всё-таки регулярные выражения мне больше подходят.

Аватар пользователя Nicebit Nicebit 9 декабря 2013 в 22:37

Только что окончательно выкинул программу The Regex Coach (версии 0.9.2) в топку!

В программе The Regex Coach обратные ссылки на группировки работают по \1 и не работают по \g{1}.
А на хостинге (PHP 5.2.17) наоборот не работают по \1 и работают по \g{1}