Циклопедия:Синтаксис фильтров MediaWiki
Правила фильтров MediaWiki составляются на C/Java/Perl-подобном языке.
Литералы[править]
Литерал можно задать, поместив его в кавычки (для строк) или вводя напрямую (справедливо для целых и дробных чисел). Допускается использование разрывов строк с помощью \n, табуляций с указанием \t.
Примеры:
"Это строка"
'Это тоже строка'
'Это строка\t с табуляцией'
'Эта строка восхвал\'яет Зелева'
'А здесь присутствует\n перевод строки'
5678
5.678
-10
Комментарии[править]
Комментарии определяются следующим образом:
/* Комментарий */
Переменные[править]
Фильтр злоупотреблений передаёт парсеру различные переменные. Эти переменные можно получить, введя их имя в месте, где будут работать литералы. В журнале злоупотреблений можно просмотреть переменные, связанные с каждым запросом.
Примеры:
USER_EDITCOUNT
ARTICLE_RECENT_CONTRIBUTORS
Существует возможность определять пользовательские переменные. Для этого после названия переменной необходимо поставить знак :=
, а в конце ;
.
Пример:
line1:="(\{\{(r|R)eflist|\{\{(r|R)efs|<references\s?/>|</references\s?>)";
Списки задаются следующим образом:
a_list := [ 5, 6, 7];
Стандартные переменные[править]
Название переменной | Описание | Тип данных | Значения |
---|---|---|---|
timestamp |
Unix-время изменения | ||
accountname |
Имя учётной записи (при создании учётной записи) | string | |
action |
Действие | string | 'edit' 'move' 'createaccount' 'autocreateaccount' 'delete' 'upload'
|
added_lines |
Добавленные строки | string | |
edit_delta |
Изменение размера страницы при правке (в байтах) | integer | |
edit_diff |
Унифицированная разница изменений правки | ||
new_size |
Новый размер страницы (в байтах) | integer | |
old_size |
Старый размер страницы (в байтах) | integer | |
removed_lines |
Удалённые строки | string | |
summary |
Описание правки | string | |
article_articleid |
ID страницы (значение доступно при просмотре HTML-кода страницы, располагается в wgArticleId ) |
integer | 0 для новых страниц |
article_namespace |
Пространство имён страницы | integer | Значение пространства имени в MediaWiki |
article_text |
Название страницы (без пространства имён) | string | |
article_prefixedtext |
Полное название страницы | string | |
moved_from_articleid |
ID переименовываемой страницы | integer | |
moved_from_namespace |
Пространство имён переименовываемой страницы | integer | Значение пространства имени в MediaWiki |
moved_from_text |
Название переименовываемой страницы (без пространства имён) | string | |
moved_from_prefixedtext |
Полное название переименовываемой страницы | string | |
moved_to_articleid |
ID целевой страницы переименования | integer | |
moved_to_namespace |
Пространство имён целевой страницы переименования | integer | Значение пространства имени в MediaWiki |
moved_to_text |
Название целевой страницы переименования (без пространства имён) | string | |
moved_to_prefixedtext |
Полное название целевой страницы переименования | string | |
user_editcount |
Число правок участника | integer | |
user_age |
Возраст учётной записи в секундах | integer | Для IP равен 0 |
user_name |
Имя учётной записи | string | |
user_groups |
Группы (включая неявные), в которых состоит участник | string | |
user_emailconfirm |
Время подтверждения адреса электронной почты | date | В формате YYYYMMDDHHMMSS |
old_wikitext |
Старый викитекст, до правки страницы | string | |
new_wikitext |
Новый викитекст, после правки страницы | string | |
added_links |
Все внешние ссылки, добавленные в правке | string | |
removed_links |
Все внешние ссылки, удалённые в правке | string | |
all_links |
Все внешние ссылки в новом тексте | string | |
new_text |
Новый текст страницы, очищенный от разметки | string | |
new_html |
Разобранный HTML-код новой версии | string | |
article_restrictions_edit |
Уровень защиты страницы от правок | string | |
article_restrictions_move |
Уровень защиты страницы от переименований | string | |
article_recent_contributors |
Последние десять редакторов страницы | string | |
old_links |
Ссылки на странице до правки | string | |
minor_edit |
Была ли правка отмечена как малое изменение | boolean | true; false; 0; 1 |
file_sha1 |
SHA1-хэш содержания файла |
Простые сравнения[править]
Переменные можно сравнивать с другими переменными или литералами с помощью следующего синтаксиса:
<
и>
возвращает значениеtrue
, когда левый операнд меньше или больше правого соответственно.<=
и>=
возвращает значениеtrue
, когда левый операнд не больше или не меньше правого соответственно.==
(или=
) и!=
возвращает значениеtrue
, если левый операнд равен или не равен правому соответственно.===
и!==
возвращает значениеtrue
, если левый операнд равен или не равен правому соответственно, и имеет или не имеет такой же тип данных, что и правый операнд, соответственно.
Пример | Результат |
---|---|
3 == 4 |
false
|
5 != 9 |
true
|
10 > 11 |
false
|
10 < 11 |
true
|
0 == False |
true
|
0 === False |
false
|
Арифметические операции[править]
В фильтрах MediaWiki применяются следующие арифметические операции:
+
складывает операнды.-
вычитает правый операнд из левого.*
умножает операнды./
делит левый операнд на правый.**
возводит левый операнд в степень, указанную в правом операнде.%
возвращает остаток от деления левого операнда на правый.
Пример | Результат |
---|---|
2 ** 5 |
32
|
9 % 4 |
1
|
Слияние строк[править]
Объединение, или конкатенация строк осуществляется посредством применения знака +
для двух символьных строк или переменных со значением string
.
Ключевые слова[править]
like
(илиmatches
) возвращает значениеtrue
, если левый операнд соответствует глобальному шаблону правого операнда.in
возвращает значениеtrue
, если правый операнд содержит левый.rlike
(илиregex
) иirlike
возвращает значениеtrue
, если левый операнд содержит регулярное выражение правого операнда (irlike
не чувствителен к регистру). Система использует PCRE.contains
.if ... then ... else ... end
— оператор условия.... ? ... : ...
— тернарный оператор.true
,false
иnull
.
Пример | Результат |
---|---|
"1234" like "12?4" |
true
|
"1234" like "12*" |
true
|
"foo" in "foobar" |
true
|
"foo" regex "\w+" |
true
|
Функции[править]
Название | Описание |
---|---|
length(string) |
Длина строки. |
lcase(string) |
Переводит все символы строки в нижний регистр. |
ccnorm(string) |
Производит нормализацию неоднозначных символов. |
rmdoubles(string) |
Удаляет повторяющиеся символы. |
specialratio(string) |
Возвращает результат деления количества специальных символов на общее число символов. |
norm(string) |
Осуществляет нормализацию. |
count(needle, haystack) |
Возвращает число вхождений первой строки во вторую. |
rcount(needle, haystack) |
Эквивалента предыдущей функции, однако манипулирует с регулярнгыми выражениями. |
rmwhitespace(text) |
Удаляет пробелы. |
rmspecials(text) |
Удаляет специальные символы. |
ip_in_range(ip, range) |
Проверяет, входит ли указанный IP-адрес в указанный диапазон. Если да, то возвращает значение true .
|
contains_any(haystack, needle1, needle2, ...) |
Возвращает true , если первая строка содержит любой из следующих аргументов. Число аргументов неограниченно.
|
substr(subject, offset, length) |
Возвращает часть строки путём смещения от второго аргумента на длину, указанную в третьем аргументе. Третий аргумент необязателен. |
strpos(haystack, needle) |
Возвращает позицию первого вхождения второй строки в первую. Функция может возвращать 0, если вторая строка находится в начале первой, поэтому предпочтительнее использование операторов === и !== .
|
str_replace(subject, search, replace) |
Заменяет все значения search в строке subject на replace .
|
set_var(var,value) |
Устанавливает переменную с заданным значением. |
Логические операции[править]
x & y
— И. Возвращаетtrue
, если верны все условия.x | y
— ИЛИ. Возвращаетtrue
, если верно хотя бы одно из условий.x ^ y
— ИСКЛЮЧАЮЩЕЕ ИЛИ. Возвращаетtrue
, если верно только одно из условий.!x
— НЕ. Возвращаетtrue
, если условие не верно.
x | y | x & y | x | y | x ^ y | !x | !y |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
Приоритетность операций[править]
Операции, как правило, выполняются слева направо, но существует определённый порядок, по которому они будут выполняться. Как только расширение не может проверить одно из условий фильтра, оно останавливает проверку остальных и переходит к следующему фильтру.
Порядок выполнения операций:
- Всё, что заключено в круглые скобки
(
и)
воспринимается как единое целое. - Включение переменных/литералов в соответствующие данные.
- Вызовы функций.
- Унарный
+
и унарный-
(определяющий положительное или отрицательное значение, например,-5
). - Ключевые слова.
- Логическая инверсия (
!x
). - Возведение в степень.
- Умножение, деление и остаток от деления.
- Сложение и вычитание.
- Сравнения:
<
,>
,==
. - Логические операции: (
&
,|
,^
,in
).
Ссылки[править]
- Extension:AbuseFilter/Rules format (англ.)
- Фильтр злоупотреблений в энциклопедии «Викиреальность»