Дополнение №2


Регулярные выражения.



Дополнение для команд и параметров, которые используют регулярные выражения.

Регулярные выражения - это простой путь найти нужную подстроку в строке. Регулярные выражения - это строки, являющиеся сочетанием обычных символов и символов, имеющих специальное значение, указывающих на то, что может изменяться в целевой строке. Регулярные выражения в AutoIt по умолчанию учитывают регистр.

Регулярные выражения составляются из одного или более простых спецификаторов. Если символа нет в следующей таблице, значит, он соответствует только самому себе.

Символы повтора (*, +, ?, {...} ) будут соответствовать строке наибольшей длины, если сразу же за ними не идёт символ вопросительный знак '?' (в этом случае часть шаблона будет соответствовать строке наименьшей длины).


Осторожно: неправильно написанное регулярное выражение может стать причиной зацикливания и даже вызвать сбой работы утилиты.


    Метасимволы вне квадратных скобок

( )начало и конец группы, например (text). Означают последовательность. Используются для применения квантификаторов не к одному символу, а к нескольким, а также для дальнейшего использования найденной последовательности.
[ ]начало и конец описания символьного класса, например [a-z]. Символьный класс возвращает один символ из множества. Изменить это могут повторители.
{ }начало и конец повторителей, например {3,8}
\экранирующий символ, принять метасимвол как обычный символ, например (\\, \., \[, \], \{, \}, \*)
^начало строки (или начало текста в многострочных текстах), например ^text text$
$конец строки (или конец текста в многострочных текстах), например ^text text$
.любой символ, кроме переноса строки @LF (по умолчанию). С флагом (?s) - любой символ
|символ "или", обычно внутри группы, например (10|20)
?предыдущий символ либо имеется, либо не имеется, аналогично и для групп. После символа повтора - жадность паттерна - (.*?)
*повтор предыдущего символа или группы 0 и более раз
+повтор предыдущего символа или группы 1 и более раз

    Метасимволы внутри квадратных скобок

  Часть шаблона, заключенная в квадратные скобки, называется символьным классом.
  Внутри скобок метасимволы теряют свое специальное значение, кроме метасимволов, принадлежащих этому классу.
  Экранировать требуется только 4 символа \ - ] [.
  Если символ "-" находится в конце перечисления, то не требует экранирования.
  В шаблоне могут использоваться метасимволы диапазонов, но не используются метасимволы границ, например \A, \B, \Z, \z, а метасимвол \b означает символ возврата 'backspace'.
  Учтите, что диапазоны, например [а-я] используют UTF-8 последовательность, а не ASCII.

\экранирующий символ
^символ исключения, но в случае, когда стоит первым, например: [^3] (все кроме три)
-символ охвата, например: [a-z] (то есть любой из символов от a до z)
[ ]начало и конец описания символьного класса, например: [a-z]

    Метасимволы подстановки

\1 - \9ссылка на найденную группу в самом шаблоне и в шаблоне замены.
  отсчёт групп слева по открывающей скобке "("
$1 - $9ссылка на найденную группу в шаблоне замены (9 не ограничение)
${1} - ${9}ссылка на найденную группу в шаблоне замены (9 не ограничение)
  например: ${1}12\$345${2} (позволяет предотвращать пересечение цифровых данных)
$0 или \0весь шаблон поиска или все группы (9 не ограничение)
\aсимвол с десятичным ASCII-кодом 7 Chr(7) (звонок). При выводе воспроизводит звуковой сигнал. BEL (hex 07)
\cnуправляющий символ, который генерируется при нажатии комбинации клавиш Ctrl+n, где n- символ
  например: \cD соответствует Ctrl+D. \cA = \001, \cZ = \032, \cM = \r = \015
\eсимвол escape Chr(27), (hex 1B)
\fперенос страницы Chr(12), (hex 0C)
\h любой горизонтальный пробел, табуляция [ \t] - Chr(9), Chr(32), Chr(160) - эквивалентно "[\x09 \xA0]"
При включённом UCP включаются дополнительные unicode разделители
"[\x09 \xA0\x{1680}\x{180E}\x{2000}-\x{200A}\x{202F}\x{205F}\x{3000}]"
\Hлюбой символ, который не пробел или табуляция [^\h]
\Kслева от \K предшествующее совпадение, т.е. текст1\Kтекст2, найти текст2, перед которым текст1
\nсимвол переноса на новую строку @LF, Chr(10), (hex 0A)
\Nлюбой символ, который не символ переноса на новую строку [^\n] (не @LF), независимо от опции (?s)
\Q ... \Eлюбые метасимволы между \Q и \E воспринимаются как текст. Не исключайте ошибки: \QD:\Edit\1.txt\E
\rсимвол возврат каретки @CR, Chr(13) (hex 0D)
\Rлюбой из символов переноса строки. [\n\f\r\v] Chr(10), Chr(11), Chr(12), Chr(13), соответствует "(?>\r\n|\n|\r)"
\tсимвол табуляции @TAB, Chr(9), tab (hex 09)
\v вертикальная табуляция (@CR и @LF и перенос страницы) [\r\n\f] Chr(10), Chr(11), Chr(12), Chr(13) - эквивалентно "[\x0A-\x0D]"
При включённом UCP включаются дополнительные unicode разделители
"[\x0A-\x0D\x{0085}\x{2028}\x{2029}]"
\Vлюбой символ, который не Chr(10), Chr(11), Chr(12), Chr(13) вертикальная табуляция (перенос строки) [^\v]
\x**где * - любая шестнадцатеричная цифра
  например: \x41 соответствует латинской букве 'A', \x50\x65\x72\x6C - слово Perl
\x{**..}где * - любая шестнадцатеричным цифра
  например: \x{50}\x{65}\x{72}\x{6C} - слово Perl
  попробуйте от \x{01} до \x{7F}, что в десятеричной системе означает символы от 1 до 127
  или в UTF кодировке \x{044F} равный символу "я"
\***где * - любая восьмеричная цифра
  например, последовательность \120\145\162\154 представляет слово Perl
    (\120 - восьмеричный код буквы Р, \145 - буквы е, \162 - буквы r, \154 - буквы l)
  пробел - \040
  попробуйте от \001 до \177, что в десятеричной системе означает символы от 1 до 127

    Метасимволы для задания диапазонов символов

\dлюбая десятичная цифра [0-9]
\Dлюбая не цифра [^0-9]
\s пустой символ: Chr(9), Chr(10), Chr(12), Chr(13), Chr(32) (перенос страницы, табуляция, возврат каретки, перевод строки и пробел) [\f\n\r\t\v ] - эквивалентно "[\h\x0A\x0C\x0D]"
При включённом UCP "[x0C\x0D]"
\Sлюбой непробельный символ [^\f\n\r\t\v ]
\w любой алфавитно-числовой символ или подчеркивание (только символы латинского алфавита) [0-9a-zA-Z_]

При включённом UCP любой алфавитно-числовой символ Unicode или подчеркивание (включая русские символы и символы других языков)
\W любой символ неслова [^0-9a-zA-Z_]

При включённом UCP любой не алфавитно-числовой символ Unicode и подчеркивание (исключая русские символы и символы других языков)
\p{Name}
\p{^Name}

\P{Name}
\P{^Name}
Только пи включённом UCP
\p{Name} - получает символ со свойством Name, где Name - имя свойства.
\P{Name} - исключает символ со свойством Name, где Name - имя свойства.

Пример записи:

(*UCP)\p{Cyrillic}+  получает слова включающие только кириллические символы
(*UCP)\p{^Cyrillic}+  получает символы исключающие кириллические символы

(*UCP)\P{^Cyrillic}+  получает слова включающие только кириллические символы
(*UCP)\P{Cyrillic}+  получает символы исключающие кириллические символы

Языковые свойства:

{Arabic}, {Armenian}, {Avestan}, {Balinese}, {Bamum}, {Bassa_Vah}, {Batak}, {Bengali}, {Bopomofo}, {Brahmi}, {Braille}, {Buginese}, {Buhid}, {Canadian_Aboriginal}, {Carian}, {Caucasian_Albanian}, {Chakma}, {Cham}, {Cherokee}, {Common}, {Coptic}, {Cuneiform}, {Cypriot}, {Cyrillic}, {Deseret}, {Devanagari}, {Duployan}, {Egyptian_Hieroglyphs}, {Elbasan}, {Ethiopic}, {Georgian}, {Glagolitic}, {Gothic}, {Grantha}, {Greek}, {Gujarati}, {Gurmukhi}, {Han}, {Hangul}, {Hanunoo}, {Hebrew}, {Hiragana}, {Imperial_Aramaic}, {Inherited}, {Inscriptional_Pahlavi}, {Inscriptional_Parthian}, {Javanese}, {Kaithi}, {Kannada}, {Katakana}, {Kayah_Li}, {Kharoshthi}, {Khmer}, {Khojki}, {Khudawadi}, {Lao}, {Latin}, {Lepcha}, {Limbu}, {Linear_A}, {Linear_B}, {Lisu}, {Lycian}, {Lydian}, {Mahajani}, {Malayalam}, {Mandaic}, {Manichaean}, {Meetei_Mayek}, {Mende_Kikakui}, {Meroitic_Cursive}, {Meroitic_Hieroglyphs}, {Miao}, {Modi}, {Mongolian}, {Mro}, {Myanmar}, {Nabataean}, {New_Tai_Lue}, {Nko}, {Ogham}, {Ol_Chiki}, {Old_Italic}, {Old_North_Arabian}, {Old_Permic}, {Old_Persian}, {Old_South_Arabian}, {Old_Turkic}, {Oriya}, {Osmanya}, {Pahawh_Hmong}, {Palmyrene}, {Pau_Cin_Hau}, {Phags_Pa}, {Phoenician}, {Psalter_Pahlavi}, {Rejang}, {Runic}, {Samaritan}, {Saurashtra}, {Sharada}, {Shavian}, {Siddham}, {Sinhala}, {Sora_Sompeng}, {Sundanese}, {Syloti_Nagri}, {Syriac}, {Tagalog}, {Tagbanwa}, {Tai_Le}, {Tai_Tham}, {Tai_Viet}, {Takri}, {Tamil}, {Telugu}, {Thaana}, {Thai}, {Tibetan}, {Tifinagh}, {Tirhuta}, {Ugaritic}, {Vai}, {Warang_Citi}, {Yi}

Различные свойства категорий:
Те свойства, которые не совсем понятны пока отмечены *
Некоторые свойства групп можно посмотреть в "Таблице символов" (charmap.exe) в группировке "Диапазоны Юникода"

СвойствоОписание
CИные, Другие символы
CcКонтрольные *
CfФорматные, типа ۝
CnНеназначенные в таблице символов, типа U+FE53 (65107)
CoЧастного использования, пипа U+E801 (59393)
CsСуррогатные, символы в диапазоне от U+D800 до U+DFFF
LБуквенные символы
LlБуквы в нижнем регистре
LmМодификаторы буквы *
LoБуквы не входящие начальный диапазон *
LtЗаглавное письменные *
LuБуквы в верхнем регистре
MMark *
McSpacing mark *
MeEnclosing mark *
MnNon-spacing mark *
NЧисла
NdДесятичное число
NlLetter number, типа 〤 (Ханчжоу цифра четыре)
NoРазличные цифры, типа ⅓, ⅔, ❶, ❷
PЗнаки препинания :;()-@/"*_{}[]#'!%&\ и др.
PcПунктуационные соединители *
PdDash punctuation *
PeЗакрывающиеся скобки ) ] } и др.
PfФинальные кавычки ” » ’ › и др.
PiНачальные кавычки “ « ‘ ‹ и др.
PoРазличная пунктуация
PsОткрывающиеся скобки ( [ { и др.
SСимволы Unicode *
ScСимвол валюты
SkСимвол модификатора *
SmМатематические символы + > = ~ и др.
SoРазличные символы *
ZРазделители: пробел, табуляция и др.
ZlLine separator *
ZpParagraph separator *
ZsПробел


    Границы символов

\Aначало текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз
\Gобозначает точку, в которой закончился предыдущий поиск (first matching position in subject)
похожий на \A, но несколько раз, если найденные следуют друг за другом от начала
\zабсолютный конец текста, не зависит от флага "(?m)" и поэтому может встретится только 1 раз
\Zконец текста, т. е. граница между любым символом и концом текста или до символа \n, если он в конце строки, не зависит от флага "(?m)" и поэтому может встретится только 1 раз.
\bначало или конец слова, т. е. граница между символами, один из которых удовлетворяет \W, а другой - удовлетворяет \w (только границы слов латинского алфавита)
При включённом UCP границы \b работают для слов Unicode, т.к. \w и \W захватывают символы Unicode.
\Bсередина слова, т. е. граница между символами, оба которых удовлетворяют \W или оба которых удовлетворяют \w
При включённом UCP серединой слова являются и слова с Unicode символами.

    Флаги модификаторы

  Ставятся в начало регулярного выражения или группы.
  Состояние модификаторов выключено по умолчанию, соответственно для использования требуется включить.
  Пример использования: (?i)(Text) или ((?-i)Text), допустимо комбинировать (?is)(Text) или ((?imsx)Text)

(?i)не учитывать регистр символов.
  это работает только для символов латинского алфавита.
(?-i)отменяет ранее включенный (?i)
(?m)многострочный поиск.
  во многострочном тексте символы ^ и $ означают начало и конец строки соответственно, иначе начало и конец текста
(?-m)отменяет ранее включенный (?m)
(?s)точке соответствует любой символ.
  символ "точка" (.) дополнительно включает в себя перенос строки @LF (режим "одна строка")
(?-s)отменяет ранее включенный (?s)
(?x)игнорирует пробелы и табуляции в регулярном выражении, кроме тех что в квадратных скобках.
  пробелы позволяют сделать регулярное выражение легко читаемым.
  позволяет в конце регулярного выражения добавить комментарий после символа # и до конца строки
(?-x)отменяет ранее включенный (?x)
(?J)allow duplicate names (разрешает дубликаты/двойные названия).
(?U)инвертировать жадность квантификаторов.
  кванторы становятся ленивыми (не жадными)
(?-U)отменяет ранее включенный (?U)

    Флаги групп

Допустимо комбинировать, например (?im-sx:Text), флаги sx выключены

(?i:...)группа не учитывает регистр символов, например (?i:Text)
  это работает только для символов латинского алфавита.
(?-i:...)группа учитывает регистр символов, например: (?-i:Text)
(?:...)исключает группу из найденных, например: (?:Text)
(?>...)группа не входящая в поиск, но имеет свойство сверхжадного квантификатора, например: (?>Text)(Text)
  Следующие 4 группы имеют фиксированную длину, в них нельзя использовать *, +, {n, m}
(?=...)группа не входящая в поиск, но проверяющая совпадение образца справа, например: (Text)(?=Text)
(?!...)группа не входящая в поиск, но проверяющая не совпадение образца справа, например: (Text)(?!Text)
(?<=...)группа не входящая в поиск, но проверяющая совпадение образца слева, например: (?<=Text)(Text), см. также \K
(?<!...)группа не входящая в поиск, но проверяющая не совпадение образца слева, например: (?<!Text)(Text)
  Дополнительные группы
(?<name>...)именованная ссылка.
  вызов именованной ссылки \k<name> это тоже что вызов \1 или $1
(?#...)группа содержащая комментарий
  например: (?# это комментарий ) (полностью игнорируется интерпретатором)
(?|...)группа без захвата со сбросом

    Повтор предыдущего элемента, применяется к символам и группам (квантификаторы)

{n}повторить предыдущий символ n раз
{n,}повторить предыдущий символ n и более раз ( {n,}? - предпочтительно наименьший захват)
{n, m}повторить предыдущий символ от n до m раз ( {n,m}? - предпочтительно наименьший захват)
*повторить предыдущий символ 0 и более раз. То же что и {0,}
  жадный захват, наибольший, который позволит совпасть оставшейся части шаблона.
+повторить предыдущий символ 1 и более раз. То же что и {1,}
  жадный захват, наибольший, который позволит совпасть оставшейся части шаблона.
?предыдущий символ либо имеется, либо не имеется. То же что и {0, 1}
  второе значение символа ? после символа повтора .*? - жадность, см. ниже
*?повторить предыдущий символ 0 и более раз
  ограничится наименьшим захватом (не жадный), который позволит совпасть оставшейся части шаблона.
+?повторить предыдущий символ 1 и более раз
  ограничится наименьшим захватом (не жадный), который позволит совпасть оставшейся части шаблона.
??предпочтительно наименьший захват, например: ([a-z]??)g для 'gg' возвращает две пустые строки

    Ревнивая или сверхжадная квантификация

  Захват без возврата к предыдущим шагам поиска.
  Захватывает всё, что удовлетворяет предыдущему символу, не заботясь о совпадении оставшейся части шаблона.
  Символ или диапазон символов следующий за сверхжадным метасимволом не должен поглащаться его диапазоном, иначе такой шаблон никогда не будет найден и является бессмысленным.
  Единственная цель сверхжадного метасимвола - ускорить захват.

*+повторить предыдущий символ 0 и более раз.
++повторить предыдущий символ 1 и более раз.
{n,}+повторить предыдущий символ n и более раз.

    Символьные классы POSIX

  Пример: [[:upper:]]{2} - поиск повтора заглавных букв. Инвертировать диапазон так: [[:^digit:]]

[:alnum:] буквы и цифры,как \w, но без "_" - эквивалентно [^\W_] или [0-9A-Za-z]
При включённом UCP буквы и цифры Unicode (такие же, как [^\W_] или \p{Xan})
[:alpha:]Буквы ASCII (такие же, как [^\W\d_] или [A-Za-z] без "_")
При включённом UCP буквы Unicode (такие же, как [^\W\d_] или \p{L})
[:ascii:]символы от Chr(0) до Chr(127)
[:blank:]пробел и символ табуляции Chr(9) и Chr(32), тоже что [\t ]
При включённом UCP горизонтальные пробелы Unicode (то же, что и \h)
[:cntrl:]управляющие символы от Chr(0) до Chr(31) и Chr(127)
[:digit:]десятичные цифры, тоже что \d, [0-9]
При включённом UCP десятичные цифры Unicode (такие же, как \d или \p{Nd})
[:graph:]тоже что символы, отображаемые при печати [:print:], но кроме пробела (от Chr(33) до Chr(126) )
[:lower:]прописные буквы [a-z]
При включённом UCP Unicode строчные буквы (такие же, как \p{Ll})
[:print:]символы, отображаемые при печати, включая пробел (от Chr(32) до Chr(126) )
[:punct:]символы, отображаемые при печати, кроме букв и цифр Chr=(33-47, 58-64, 91-96, 123-126), те, что не входят ни в [:alnum:], ни в [:cntrl:]
[:space:]пробельные символы (как \s, но включая символ VT: Chr(11) ) от Chr(9) до Chr(13) и Chr(32). Тоже что [\f\n\r\t\v ]
[:upper:]заглавные буквы [A-Z]
При включённом UCP Unicode прописные буквы (такие же, как \P{Lu})
[:word:]Символы ASCII "Word" (такие же, как \w или [[:alnum:]_]).
При включённом UCP символы Unicode "word" (такие же, как \w или [[:alnum:]_] или \p{Xwd})
[:xdigit:]шестнадцатеричные цифры [0-9A-Fa-f]

    Обратные ссылки

Обратные ссылки позволяют повторно использовать содержимое ранее захваченной группы.

\n
\1 ... \9
Ссылается на предыдущую группу захвата по ее абсолютному числу.
Предупреждение: если номер группы n не существует, он вычисляется как символ со значением n при условии, что n является допустимым восьмеричным значением, иначе происходит ошибка.
Из-за этой двусмысленности данная форма не рекомендуется.
Отдавайте предпочтение следующим формам для безопасной семантики.
\gn Ссылается на предыдущую группу захвата по ее абсолютному числу.
\g{n} Ссылается на предыдущую группу захвата по ее абсолютному числу. Аналогично приведенному выше, но четко разграничивает, где заканчивается n: полезно, когда следующий символ(ы) является(являются) цифрами.
\g-n Ссылается на предыдущую группу захвата по ее относительному номеру.
\k Ссылается на предыдущую группу захвата по ее имени.

    Ссылки на ...

Группы захвата подпрограмм - это подшаблоны, которые могут быть вызваны (возможно, рекурсивно) точно так же, как подпрограммы в языке программирования. Подшаблон просто повторно запускается в текущей точке сопоставления.

(?R) или (?0) Рекурсирует во все регулярное выражение.
(?n) Вызывает подшаблон по абсолютному номеру.
(?+n) Вызывает подшаблон по относительному номеру.
(?-n) Вызывает подшаблон по относительному номеру.
(?&name) Вызывает подшаблон по имени.

    Условные подмаски

(?(condition)yes-pattern)например:
  (?(условие)шаблон_при_успехе)
  (?(если)то)
  (?(?=[a-z])\d)
(?(condition)yes-pattern|no-pattern)например:
  (?(условие)шаблон_при_успехе|шаблон_при_не_успехе)
  (?(если)то|иначе)
  (?(?<=\d)a|b)
  (?:(?>(?=[^a-z]*[a-z])())?(?:(?=\1)aa|(?!\1)1))
(?=[\w]+)| (?R)рекурсивный вызов

    Unicode Category Properties (UCP)

  AutoIt использует движок PCRE. PCRE означает "Perl-совместимые регулярные выражения" и является наиболее полным доступным движком с открытым исходным кодом.
  В версии AutoIt 3.3.15.3 обновлён движок PCRE до версии 8.41.
  Эта реализация включает поддержку Unicode Category Properties (UCP), которая позволяет выполнять точную обработку большинства человеческих языков.
  Однако для поддержания совместимости с предыдущими версиями и поддержания максимальной скорости сопоставления поддержка UCP по умолчанию не включена.
  Вы можете включить его, добавив строку (*UCP) в самом начале вашего шаблона поиска (pattern).
  Если параметр UCP включен, он изменяет действие ряда элементов регулярных выражений.
  Выше в элементах указано, где это применимо и какие изменения при этом действуют.
  UCP он заставляет последовательности, такие как \w, \W, \v, \V, \h, \H и другие, использовать свойства Unicode для определения типов символов, вместо того чтобы распознавать только символы ASCII c кодами менее 128 через таблицу поиска. Они соответственно влияют на \b, \B ...
  UCP позволяет подключать специальные свойства символов: \p{Name}, \P{Name}, которые облегчают работу с Unicode последовательностями.
  В команде regex в библиотеке Library_Example есть примеры применения данной возможности.


    Эти флаги не действуют в AutoIt3

\p любой символ пунктуации
\lозначает, что следующий символ регулярного выражения преобразуется в нижний регистр.
\uозначает, что следующий символ регулярного выражения преобразуется в верхний регистр.
\L...\Еозначает, что все символы в регулярном выражении между \L и \Е преобразуются в нижний регистр.
\U...\Еозначает, что все символы в регулярном выражении между \U и \Е преобразуются в верхний регистр.
\xлюбой шестнадцатеричный символ
\<начало слова, т. е. граница между символом, удовлетворяющим \W и символом, удовлетворяющим \w
\>конец слова, т. е. граница между символом, удовлетворяющим \w и символом, удовлетворяющим \W
{,n}повторить предыдущий символ от 0 до n раз

    Примеры конструкций

.*повтор любого символа, а значит весь текст
[ ... ]одиночный символ множества, например [aeiou] - любой из строчных гласных
[^ ... ]ни один из символов множества, например [^aeiou] - ни один из строчных гласных
[0-9A-Fa-f]{6}шестнадцатеричное число, например FF0000
[А-яЁё]диапазон для русских букв. Или так [А-Яа-яЁё]

Примеры
НайтиЗаменитьОписание
(\r\n|\r|\n){2,}\1удаляет пустые строки
(?<![^\s\A])([А-яЁё]+)[\h]+\1\1удаляет повторы слов
[A-ZА-ЯЁ]{2,}?[a-zа-яё]+выявляет файлы, в которых есть ошибки вида "НАйти"- не преднамеренный повтор заглавной буквы
(.{35,}?)\h'$1'&@CRLFвыполняет перенос строки на границе первого попавшегося пробела после каждых 35 символов
(*UCP)(?si)(https?://[\w.:]+/?[\w/?&:,=.~;@–\-+!*_#%()]*)найти ссылки, в которые могут входить русские символы и символы Unicode
[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})найти почтовые ящики






Для изучении на практике регулярных выражений рекомендую команду regex


1. Просмотреть все примеры из библиотеки шаблонов Library_Example, но и другие тоже конечно )



2. Обратить внимание на примеры "Замены" , в ряде случаев необходимо просто нахождение строки.
Ну а далее дело в усидчивости и терпения. Тем более что изучение и понимание регулярных выражений ведёт к экономии времени в автоматизации действий.

Они есть везде, где простым поиском (заменой) сложно решить задачу одним кликом.
Они есть во многих программах и позволяют быстро отсеять ненужное, оставив необходимое:

в Total Commander - в групповом переименовании, в диалоге поиска...



в AkelPad, в текстовых редакторах...



На первый взгляд - это что-то непонятное и необъятное, на самом деле дорогу осилит идущий.

Игнорирование и не изучение регулярных выражений отбрасывает назад

Вот несколько советов:
1. Не старайтесь изучить сразу всё. Не обязательно знать все правила, чтобы использовать регулярные выражения.
2. При решении какой-либо задачи с помощью регулярных выражений:
  a) Пробуйте сами
  б) Если не получается ещё раз прочитайте соответствующую литературу
  в) Если не получается спросите
  (важен порядок изучения)
3. Изучайте на примерах. В интернете можно найти достаточно примеров.
4. Записывайте, сохраняйте "пройденные" примеры (конструкции)



Рассмотрим простой пример (задачу можно выполнить даже без регулярных выражений)

Есть строка coverAbout
Необходимо оставить только About

Пункты действий соответствуют номерам на картинке.

1. Устанавливаем радио кнопку "Замена"
2. В поле Текста вводим строку coverAbout
3. Создаём условия поиска в поле шаблона cover(About)
4. Вводим условия замены [bgcolor=red]$1[/bgcolor]
5. Нажимаем "Тест"
6. Если всё правильно, то в поле "Результаты поиска" будет результат [bgcolor=green]About[/bgcolor]
----
7. Для дополнительной справки
8. Можно сохранить шаблон




© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru