{{#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:а,б,в,г,д|а}}→ Не передано ни одного регулярного выражения.