MassEditRegex: различия между версиями

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску
м (Замена текста — « - это » на « — это »)
м (Замена текста — « - » на « — »)
Строка 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, там выражения уже с флагами.

Копируешь кусок кода страницы и начинаешь колдовать.

Пример поиска на странице квадратных ссылок.

Regexr.PNG

Ищем

\[\[(?!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 символов.
  • Если в результат надо втсавить кусок искомого текста, то в поиске его надо выделить круглыми скобками, а в выводе в место подстановки написать $1 — для первых скобок, $2 для вторых и т.д.
    • (?:) и {?!} не считаются перечисляющими скобками.

Поле замены

Примеры