{{#regex}}

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску
{{#regex:}}
Описание:
Производит поиск или замену в строке с помощью регулярного выражения
Параметры:
1 (обязательно):
строка, в которой производится поиск и замена
2 (обязательно):
регулярное выражение для поиска
3:
строка замены
subpattern:
номер подобразца
sep:
разделитель
template:
шаблон, в который оборачивается каждый результат поиска
intro:
строка, добавляемая слева к возвращаемому значению, если хоть одно совпадение найдено
outro:
строка, добавляемая справа к возвращаемому значению, если хоть одно совпадение найдено
default:
строка, возвращаемая, если ни одно совпадение не найдено
limit:
ограничение на количество найденных или заменённых образцов
Возвращает:
найденная или обработанная строка
Синтаксис:
{{#regex:
    | строка, в которой производится поиск и замена
    | регулярное выражение для поиска
    | строка замены

    | subpattern = номер подобразца

    | sep = разделитель

    | template = шаблон, в который оборачивается каждый результат поиска

    | intro = строка, добавляемая слева к возвращаемому значению, если хоть одно совпадение найдено

    | outro = строка, добавляемая справа к возвращаемому значению, если хоть одно совпадение найдено

    | default = строка, возвращаемая, если ни одно совпадение не найдено

    | limit = ограничение на количество найденных или заменённых образцов

}}

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

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

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

Параметры[править код]

  1. строка, в которой производится поиск и замена,
  2. регулярное выражение для поиска. В качестве ограничителей допустимы знаки /, % и |. Символ разделения альтернатив | следует заменять шаблоном {{!}}. Разрешённые опции — i, u, m, s, x, A, D, S, U и X,
  3. строка замены. Если строка замены имеет вид ((шаблон)), то найденное соответствие будет заменено вызовом шаблона, в параметр {{{0}}} которого будет передано всё найденное соответствие, а в параметры {{{1}}}{{{9}}} — подстроки,
  • subpattern — номер подобразца в круглых скобках, возвращаемого вместо всего образца (т.е. \0 по умолчанию),
  • sep — разделитель при выводе результатов поиска,
  • template — шаблон, в который оборачивается каждый результат поиска. Если подстрок нет, найденный результат передаётся в параметры {{{0}}} и {{{1}}}; в противном случае, результат передаётся в параметр {{{0}}}, а подстроки — в параметры {{{1}}}{{{9}}},
  • intro — строка, добавляемая слева к возвращаемому значению, если хоть одно совпадение найдено,
  • outro — строка, добавляемая справа к возвращаемому значению, если хоть одно совпадение найдено,
  • default — строка, возвращаемая, если ни одно совпадение не найдено,
  • limit — ограничение на количество найденных или заменённых образцов.

Обязательны первые два параметра. Все именованные параметры, кроме limit, имеют значение только для режима поиска.

Пара неименованных параметров /поиск/|замена, которая также может быть записана в виде одного именованного параметра /поиск/ = замена, может повторяться несколько раз, означая множественную замену.

Множественная замена может также быть задана параметром вида /поиск1/замена1/поиск2/замена2/…/поискn/заменаn/ — мультирегулярным выражением.

После строк замены и внутри мультирегулярного выражения возможны управляющие символы:

  • *^ — приказ прекратить обработку регулярных выражений при срабатывании предыдущего,
  • n^ — приказ пропустить следующие n регулярных выражений при срабатывании предыдущего,
  • *!^ — приказ прекратить обработку регулярных выражений при несрабатывании предыдущего,
  • n!^ — приказ пропустить следующие n регулярных выражений при несрабатывании предыдущего,
  • нецифровая метка: — метка для абсолютного перехода,
  • нецифровая метка^ — приказ перейти вперёд к метке нецифровая метка при срабатывании предыдущего регулярного выражения,
  • нецифровая метка!^ — приказ перейти вперёд к метке нецифровая метка при несрабатывании предыдущего регулярного выражения.

В режиме поиска возвращается список совпадений. В режиме замены — результат выполнения всех замен.

Примеры[править код]

Поиск[править код]

  • {{#regex:а,б,в,г|%[аб]%u|sep=,}} → а,б
  • {{#regex:one, two, three|%\w+%|template=lang-en|sep=,}} → англ. one,англ. two,англ. three
  • {{#regex:а,б,в,г|%(?:^|,)(.*?)(?:,|$)%}} → а,,в,

Замена[править код]

  • {{#regex:а,б,в,г|%[аб]%u|[[\0]]|limit=1}} → а,б,в,г
  • {{#regex:а,б,в,г|%[аб]%u|[[\0]]}} → а,б,в,г
  • {{#regex:а,б,в,г|%(?:^|,)(.*?)(?:,|$)%|[[\1]]}} → абвг

Замена на вызов шаблона[править код]

Многострочный синтаксис[править код]

{{#regex:
       Александр, Константин, Николай, Михаил
     | /(
              Александр
        {{!}} Николай
       )/x = царь
     | /(
              Константин
        {{!}} Михаил
       )/x = великий князь
 }}

даст: «царь, великий князь, царь, Михаил».

Множественная замена[править код]

Несколько параметров[править код]

  • {{#regex:а,б,в,г|%а%|a|%б%|b|%в%|v|%г%|g}} → a,b,v,g
  • {{#regex:а,б,в,г|%а%|a|%б%|b|%в%|v|%г%}} → a,b,v,г

Синтаксис со знаком равенства[править код]

  • {{#regex:Александр, Константин, Николай|/Александр/=Alexander|/константин/ui=Constantine|/Николай/ = Nicholas}} → Alexander, Constantine, Nicholas

Один параметр (мультирегулярное выражение)[править код]

  • {{#regex:а,б,в,г|/а/a/б/b/в/v/г/g/}} → a,b,v,g
  • {{#regex:а,б,в,г|/а/a/б/b/в/v/г/g/iu}} → a,b,v,g

Управление выполнением[править код]

Выход при успехе[править код]

  • {{#regex:а,б,в,г|%а%|a|%б%|b|*^|%в%|v|%г%|g}} → a,b,в,г
  • {{#regex:а,б,в,г|/а/a/б/b/*^/в/v/г/g/}} → a,b,в,г

Выход при неуспехе[править код]

  • {{#regex:а,б,в,г|%а%|a|%б%|b|%я%|v|*!^|%г%|g}} → a,b,в,г
  • {{#regex:а,б,в,г|/а/a/б/b/я/v/*!^/г/g/}} → a,b,в,г

Относительный переход при успехе[править код]

  • {{#regex:а,б,в,г|%а%|a|%б%|b|1^|%в%|v|%г%|g}} → a,b,в,g
  • {{#regex:а,б,в,г|/а/a/б/b/1^/в/v/г/g/}} → a,b,в,g

Относительный переход при неуспехе[править код]

  • {{#regex:а,б,в,г|%а%|a|%я%|b|1!^|%в%|v|%г%|g}} → a,б,в,g
  • {{#regex:а,б,в,г|/а/a/я/b/1!^/в/v/г/g/}} → a,б,в,g

Абсолютный переход при успехе[править код]

  • {{#regex:а,б,в,г,д|%а%|a|%б%|b|Д^|%в%|v|%г%|g|Д:|%д%|d}} → a,b,в,г,d
  • {{#regex:Александр, Константин, Николай, Михаил|/Александр/Alexander/Константин/Constantine/m^/Николай/Nicholas/m:/Михаил/Michael/}} → Alexander, Constantine, Николай, Michael

Абсолютный переход при неуспехе[править код]

  • {{#regex:а,б,в,г,д|%а%|a|%я%|b|Д!^|%в%|v|%г%|g|Д:|%д%|d}} → a,б,в,г,d
  • {{#regex:Александр, Константин, Николай, Михаил|/Александр/Alexander/Екатерина/Constantine/m!^/Николай/Nicholas/m:/Михаил/Michael/}} → Alexander, Константин, Николай, Michael

Lua[править код]

mw.massprocess.match[править код]

mw.massprocess.replace[править код]

  • {{#invoke:Test|replace|абвгд|/[бг]/u|Ы}} → аЫвЫд

Ошибки[править код]

  • {{#regex:}} → Передайте хотя бы два параметра: обрабатываемую строку и регулярное выражение для поиска.
  • {{#regex:а,б,в,г,д}} → Передайте хотя бы два параметра: обрабатываемую строку и регулярное выражение для поиска.
  • {{#regex:а,б,в,г,д|а}} → Не передано ни одного регулярного выражения.

См. также[править код]