RegexParserFunction

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску
RegexParserFunction
Реализует:
Perl-совместимые регулярные выражения
Язык программирования:
PHP



Системные требования:
MediaWiki
Разработчик:
Александр Машин на основании идеи Джима Р. Уилсона



Дата появления:
2011
Текущая версия:
0.98
Дата выхода текущей версии:
5 апреля 2013
Статус:
бета-версия


Предыдущая версия:
0.97


RegexParserFunction — расширение MediaWiki, реализующее функцию парсера {{#regex:}} для поиска и замены в строках с помощью Perl-совместимых регулярных выражений, разработанное специально для «Традиции» Александром Машиным на основании идеи Джима Р. Уилсона.

Возможности и использование[править | править код]

Функция {{#regex:}} позволяет провести поиск, замену и множественную замену, в том числе, с условными переходами. Синтаксис регулярных выражений — Perl-совместимые регулярные выражения PHP с некоторыми ограничениями для безопасности.

Эта функция парсера — необходимая часть Summary.

История[править | править код]

Поддержка регулярных выражений понадобилась в «Традиции» в ходе развития семантических возможностей шаблонов Summary, когда потребовалось различать и правильно обрабатывать значения параметров, которые могли содержать или не содержать обрамляющие скобки [[]], включать несколько значений свойств Semantic MediaWiki, а также примечания или разметку, не подлежащие семантическому аннотированию.

Первоначально использовалось расширение MediaWiki RegexParserFunctions Джима Р. Уилсона.

Затем, однако, понадобилось расширение функциональности:

  • было желательно упростить громоздкий синтаксис обработки строки несколькими выражениями подряд, для чего приходилось вкладывать вызовы функции друг в друга,
  • для дальнейшего развития Summary потребовалась возможность передавать в одном параметре несколько последовательных поисков и замен,
  • потребовалась также возможность выполнять обработку выражением, только если обработка одним из предыдущих была неудачна.

Тогда и было разработано это расширение, позволяющее проводить множественную замену (несколькими парами параметров с версии 0.3, в одном параметре — мультирегулярном выражении — с версии 0.9) и поддерживающее условные переходы: относительные (синтаксис ^1) с версии 0.9 и абсолютные (синтаксис ^метка) с версии 0.96; при успехе с версии 0.9 и неуспехе (синтаксис ^!1) с версии 0.98.

В функцию парсера в режиме поиска были также добавлены некоторые возможности, роднящие её с функцией для семантических запросов {{#ask:}}: разделитель списка (sep), шаблон для обёртки найденных совпадений (template), ограничение на число совпадений (limit; работает и при замене; с версии 0.9), вступление (intro), заключение (outro) и значение по умолчанию (default). Кроме того, параметр subpattern задаёт номер подобразца, который должен быть возвращён в режиме поиска вместо всего найденного образца (т.е. \0).

Из другого расширения MediaWiki, ReplaceSet Даниэля Фризена, в версию 0.95 была заимствована идея передачи регулярного выражения и заменяющей строки в одном именованном параметре: /поиск/ = замена.

Начиная с версии 0.97, при замене, включая множественную, возможно использование, вместо строки замены, шаблона, которому в качестве параметров будут переданы найденные совпадения и подстроки. Синтаксис вызова шаблона — /поиск/ = ((шаблон)). Начиная с версии 0.98 допустимы форматированные, в том числе, многострочные, регулярные выражения (опция x).