Делаю правила в Rules, в условии использую регулярные выражения. Пишу регулярное выражение (проверяю в программе The Regex Coach), вставляю в Друпал. Но, в некоторых случаях, регулярные выражения не работают.
Пример: Нужно определить, что сперва идёт название города, а потом ещё несколько городов, разделённых тире
Текст: Колпашево - Большеустьикинское - Кондопога - Бай-Тайгинский - Красные Баррикады - Кяхулай - Ачинск - Гурьевск - Кашира - Дрожжановский -
Рабочее регулярное выражение: Колпашево \-[^\-]{1,30}\-
Нерабочее регулярное выражение: Колпашево \-[^\-]{1,30}\-[^\-]{1,30}\-
В первом случае правило срабатывает, но я хочу убедиться, что в тексте несколько городов через тире. Поэтому повторяю последнюю часть регулярного выражения, и оно перестаёт срабатывать.
Ещё один раз тоже вроде проблема была с символьными классами, но там извернулся без них.
Что не так?
Решение: опытным путём вышел на то, что 1 кирилический символ в UTF-8 равен двум байтам (собственно потом нашёл этому подтверждение). Поэтому просто нужно было увеличить максимальное число в квантификаторе.
Комментарии
Не используйте регулярные выражения.
А как тогда делать условия?
А в рулез разве нельзя выполнить пхп-код? Разбивайте строку через explode и всё.
deb, про php забыл чё-то. ) С его помощью нашёл свою ошибку (дописал в основной топик).
За explode спасибо, но я описал лишь маленькую часть задачи, поэтому всё-таки регулярные выражения мне больше подходят.
Только что окончательно выкинул программу The Regex Coach (версии 0.9.2) в топку!
В программе The Regex Coach обратные ссылки на группировки работают по \1 и не работают по \g{1}.
А на хостинге (PHP 5.2.17) наоборот не работают по \1 и работают по \g{1}