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