MassEditRegex

Материал из Dwarf Fortress Wiki
Версия от 13:21, 14 сентября 2019; MEX BOT (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Поле страниц

Поле поиска

Операторы

Формирование запросов

Для понимания работы регулярных выражений сходить на интерактивный полигон, 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 для вторых и т.д.
    • (?:) и {?!} не считаются перечисляющими скобками.

Поле замены

==Примеры==