- 1
"(\{\{([#%$])([^:\}]+)(:([^\}]+))?\}\})"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+124
"(\{\{([#%$])([^:\}]+)(:([^\}]+))?\}\})"
Регуляркоговно.
Заменено на
"(\{\{([#%$])(.+?)(:(.+))?\}\})"
(:(.+))? - это вообще что-то мозговыносящее. Зачем?
Опциональное двоеточие с неким текстом после него.
Как я понял регулярка парсит такие выражения: Вопрос к ОП'у: это какой-то шаблонизатор?
Для захвата видимо. Меня другой вопрос волнует - зачем нужны скобки снаружи, вокруг всего выражения ;)
> не понятно, как быть с нумерацией
Насколько помню, во всех движках регексов группы тупо нумеруются слева направо, согласно позиции открывающей скобки.
> я бы все равно отказался от внутренних скобок, и сделал бы так: (:.+)?,
Тогда придется ":" отрезать в коде, что тоже не айс.
Ну в том-то и дело, что отрезать в коде - проще и дешевле, а если эта группа как-то должна была использоваться через \N или $N - то ее явно таким способм использовать не получится.
Чем дорисовать пару скобочек и брать значение из следующей группы? Да ну? :)
> то ее явно таким способм использовать не получится
Почему?
группа 1 - весь тег {{$aa:bb}} или {{$aa}}
группа 2 - один символ $ % или #
группа 3 - aa
группа 4 - :bb, если оно есть
группа 5 - bb, если оно есть
А как ее использовать, если она может быть, а может и не быть?
Плох тот похапешнег, что не написал своего шаблонизатора, своей CMS, ...
На самом деле я уже постил часть этого шаблонизатора здесь пару говнокодов назад, где меня закидали какахами, уверяя, что пускать контроллер в область видимости данных, буферить вывод в переменную и возвращать назад - это нормально. Шаблонизатор специфичен, он построен на антипаттерне, пропагандирует "толстые контроллеры", а сам при этом всего пол сотни строк занимает. Зато бузиннес логику от верстки отделяет хорошо.
Единственное оправданное применение регэкспов, которое мне встретилось - это парсер ответа irc-сервера лет так 6 назад ;)