Литералы
Литерал можно задать, поместив его в кавычки (для строк) или вводя напрямую (справедливо для целых и дробных чисел). Допускается использование разрывов строк с помощью \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
).