{{#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 с некоторыми ограничениями для безопасности.
Параметры[править код]
- строка, в которой производится поиск и замена,
- регулярное выражение для поиска. В качестве ограничителей допустимы знаки
/,%и|. Символ разделения альтернатив | следует заменять шаблоном {{!}}. Разрешённые опции —i,u,m,s,x,A,D,S,UиX, - строка замены. Если строка замены имеет вид
((шаблон)), то найденное соответствие будет заменено вызовом шаблона, в параметр{{{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:one, two, three|/(\w+)/|((lang-en))}}→ англ. one, англ. two, англ. three{{#regex:one, two, three|/(\w+)/ = ((lang-en))}}→ англ. one, англ. two, англ. three{{#regex:one, two, three|/(\w+)/((lang-en))/}}→ англ. one, англ. two, англ. three
Многострочный синтаксис[править код]
{{#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[править код]
| свёрнутое содержимое |
|---|
[1] = {
[0] = 'б'
},
[2] = {
[0] = 'г'
}
}
[1] = {
[1] = 'б',
[0] = 'б'
},
[2] = {
[1] = 'г',
[0] = 'г'
}
}
[1] = {
[1] = '2',
number = '2',
[0] = 'часть2'
}
} |
mw.massprocess.replace[править код]
{{#invoke:Test|replace|абвгд|/[бг]/u|Ы}}→ аЫвЫд
Ошибки[править код]
{{#regex:}}→ Передайте хотя бы два параметра: обрабатываемую строку и регулярное выражение для поиска.{{#regex:а,б,в,г,д}}→ Передайте хотя бы два параметра: обрабатываемую строку и регулярное выражение для поиска.{{#regex:а,б,в,г,д|а}}→ Не передано ни одного регулярного выражения.