MassEditRegex: различия между версиями
Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
ArexBot (обсуждение | вклад) м (Замена текста — « - это » на « — это ») |
ArexBot (обсуждение | вклад) м (Замена текста — « - » на « — ») |
||
Строка 1: | Строка 1: | ||
==Поле страниц== | |||
==Поле поиска== | |||
===Операторы=== | |||
===Формирование запросов=== | |||
Для понимания работы регулярных выражений сходить на интерактивный полигон, [http://gskinner.com/RegExr/ RegExr] — лучший из мне известных, ставим режим replace, | |||
* первое окно — что искать, '''обязательно ставим флаг global''', иначе будет только 1 вхождение на странице. Для вики /g не нужен, кроме того он ищет только внутри строки, так что выделить 3 сроки одним выражением не получится. | |||
* второе — что вставлять | |||
* третье исходный текст | |||
* ниже — что получилось | |||
* что в итоге надо будет отдать страничке [[Служебная:MassEditRegex/MassEditRegex]], там выражения уже с флагами. | |||
Копируешь кусок кода страницы и начинаешь колдовать. | |||
Пример поиска на странице квадратных ссылок. [[Image:Regexr.PNG|400px|right]] | |||
Ищем | |||
<nowiki>\[\[(?!Category:|Категория:|en:)(.*?)\]\]</nowiki> | |||
Вставляем | |||
<nowiki>[[$1]]</nowiki> | |||
Маска поиска для MassEditRegex | |||
<nowiki>/\[\[(?!Category:|Категория:|en:)(.*?)\]\]/m</nowiki> | |||
Как это работает: | |||
* квадратные скобки используются для перечисления набора символа для поиска , чтобы скобка считалась просто текстом ставим косую черту \ | |||
** <nowiki>[a-c] значит найти a,b или c</nowiki> | |||
** <nowiki>\[a-c\]</nowiki> значит найти текст <nowiki>"[a-c]"</nowiki> | |||
* (?:<текст1>|<текст2>|...) значит найти любое из указанных слов | |||
* (?!<текст1>|<текст2>|...) значит найти только не указанные слова | |||
* любой символ — это точка | |||
* если надо повторить предыдущее действие, то используем квантификаторы: | |||
** * — 0 или больше предыдущих символов или множеств, жадная версия | |||
*** .* сколько угодно символов, даже 0 | |||
*** [a-c]* — сколько угодно букв abc, даже 0 | |||
** ? после любого символа, кроме звёздочки — встреча символа 0 или 1 раз | |||
*** .? символ, если есть | |||
*** [a-c]? — один из указанных символов, если есть | |||
** *? — особый случай, называется "ленивая версия", в 99% случаев именно её и надо использовать, а не жадную. Например, текст abbbbbabbba будет разбираться: | |||
*** a.*a отдаст abbbbbabbba , .* пожрала все буквы, отдав только последнее вхождение | |||
*** a.*?a отдаст abbbbba , .*? глотала буквы до первой же, понадобившейся хвосту регулярного выражения | |||
** более яркий пример, текст "<nowiki>надета [[cloth|тканая]] одежда, оружие и [[armor|броня]] небольшого</nowiki>" | |||
*** \[\[.*\]\] отдаст <nowiki>"[[cloth|тканая]] одежда, оружие и [[armor|броня]]"</nowiki> | |||
*** \[\[.*?\]\] отдаст <nowiki>"[[cloth|тканая]]"</nowiki>, т.к. остановится на первой же паре закрывающих скобок | |||
** Символ + после любого символа или скобок — 1 или больше раз повторить. Работает как и *, но не выбирает 0 символов. | |||
* Если в результат надо втсавить кусок искомого текста, то в поиске его надо выделить круглыми скобками, а в выводе в место подстановки написать $1 — для первых скобок, $2 для вторых и т.д. | |||
** (?:) и {?!} не считаются перечисляющими скобками. | |||
==Поле замены== | |||
==Примеры== |
Версия от 12:51, 14 апреля 2012
Поле страниц
Поле поиска
Операторы
Формирование запросов
Для понимания работы регулярных выражений сходить на интерактивный полигон, RegExr — лучший из мне известных, ставим режим replace,
- первое окно — что искать, обязательно ставим флаг global, иначе будет только 1 вхождение на странице. Для вики /g не нужен, кроме того он ищет только внутри строки, так что выделить 3 сроки одним выражением не получится.
- второе — что вставлять
- третье исходный текст
- ниже — что получилось
- что в итоге надо будет отдать страничке Служебная:MassEditRegex/MassEditRegex, там выражения уже с флагами.
Копируешь кусок кода страницы и начинаешь колдовать.
Пример поиска на странице квадратных ссылок.
Ищем
\[\[(?!Category:|Категория:|en:)(.*?)\]\]
Вставляем
[[$1]]
Маска поиска для MassEditRegex
/\[\[(?!Category:|Категория:|en:)(.*?)\]\]/m
Как это работает:
- квадратные скобки используются для перечисления набора символа для поиска , чтобы скобка считалась просто текстом ставим косую черту \
- [a-c] значит найти a,b или c
- \[a-c\] значит найти текст "[a-c]"
- (?:<текст1>|<текст2>|...) значит найти любое из указанных слов
- (?!<текст1>|<текст2>|...) значит найти только не указанные слова
- любой символ — это точка
- если надо повторить предыдущее действие, то используем квантификаторы:
- * — 0 или больше предыдущих символов или множеств, жадная версия
- .* сколько угодно символов, даже 0
- [a-c]* — сколько угодно букв abc, даже 0
- ? после любого символа, кроме звёздочки — встреча символа 0 или 1 раз
- .? символ, если есть
- [a-c]? — один из указанных символов, если есть
- *? — особый случай, называется "ленивая версия", в 99% случаев именно её и надо использовать, а не жадную. Например, текст abbbbbabbba будет разбираться:
- a.*a отдаст abbbbbabbba , .* пожрала все буквы, отдав только последнее вхождение
- a.*?a отдаст abbbbba , .*? глотала буквы до первой же, понадобившейся хвосту регулярного выражения
- более яркий пример, текст "надета [[cloth|тканая]] одежда, оружие и [[armor|броня]] небольшого"
- \[\[.*\]\] отдаст "[[cloth|тканая]] одежда, оружие и [[armor|броня]]"
- \[\[.*?\]\] отдаст "[[cloth|тканая]]", т.к. остановится на первой же паре закрывающих скобок
- Символ + после любого символа или скобок — 1 или больше раз повторить. Работает как и *, но не выбирает 0 символов.
- * — 0 или больше предыдущих символов или множеств, жадная версия
- Если в результат надо втсавить кусок искомого текста, то в поиске его надо выделить круглыми скобками, а в выводе в место подстановки написать $1 — для первых скобок, $2 для вторых и т.д.
- (?:) и {?!} не считаются перечисляющими скобками.