Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "RegExReplace() [v1.0.45+]", в содержании - "String Management" - "RegExReplace()", v1.0.48.03.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

RegExReplace() [v1.0.45+]

Заменяет в строке подстроки, отвечающие шаблону (регулярному выражению).

NewStr := RegExReplace(Haystack, NeedleRegEx [, Replacement = "", OutputVarCount = "", Limit = -1, StartingPosition = 1])

Параметры

NewStr RegExReplace() возвращает копию Haystack, в которой были произведены замены. Если замен не было, Haystack возвращается неизменённой. Если происходит ошибка (например, синтаксическая ошибка в NeedleRegEx), Haystack возвращается неизменённой (исключение — версии до 1.0.46.06, возвращающие пустую строку), и ErrorLevel устанавливается в одно из значений, описанных ниже, а не в ноль.
Haystack Строка, в которой производится поиск и замена.
NeedleRegEx Шаблон для поиска, который является Perl-совместимым регулярным выражением (PCRE). Опции шаблона (если есть) должны стоять в его начале и отделяться от него закрывающей круглой скобкой. Например, шаблон "i)abc.*123" включает опцию нечувствительности к регистру и будет искать строку "abc", за которой следуют ноль или больше любых символов, за которыми следует строка "123". Если опций нет, скобка необязательна; например, ")abc" эквивалентно "abc".
Replacement Строка, которая будет подставлена вместо найденных подстрок. Она является простым текстом (не регулярным выражением). Она может содержать обратные ссылки — например, $1, которая обозначает подстроку из Haystack, совпавшую с первым подшаблоном. Первые десять ссылок обозначаются выражениями от $0 до $9, где $0 — это подстрока, отвечающая всему шаблону в целом, $1 — подстрока, совпавшая с первым подшаблоном, $2 — со вторым, и т.д. Для ссылок с номерами от 10 и выше используйте фигурные скобки: ${10}, ${11} и т.д. У именованных подшаблонов заключайте в скобки имя: ${ИмяПодшаблона}. Для обозначения литерального $ используйте $$ (это единственный символ, требующий такого специального обращения; применять левую наклонную черту для экранирования чего бы то ни было не требуется).

Чтобы изменить регистр букв в подстроке, вставляемой по обратной ссылке, поставьте после $ одну из следующих букв: U или u (верхний регистр), L или l (нижний), T или t (титульный, у которого первая буква каждого слова в верхнем регистре, а остальные в нижнем). Например, $U1 и $U{1} оба означают подстроку первого подшаблона в верхнем регистре.

Несуществующие ссылки, а также те, которые ни с чем не совпали в Haystack — как, например, один из подшаблонов в (abc)|(xyz) — трактуются как пустые строки.
OutputVarCount Имя переменной (без кавычек), в которой будет сохранено количество произведённых замен (0, если замен не было).
Limit Если Limit опущен, он считается равным -1, что означает замену всех подстрок в Haystack, отвечающих шаблону. Иначе укажите максимально допустимое число замен. Часть Haystack правее последнего совпадения будет оставлена нетронутой.
StartingPosition Начальная позиция. Если опущена, считается равной 1 (начало Haystack). Иначе укажите 2, чтобы начать со второго символа, 3 — с третьего, и т.д. Если StartingPosition находится за пределами Haystack, поиск стартует с пустой строки в конце Haystack (что, как правило, приводит к отсутствию замен).

Если StartingPosition меньше 1, она считается смещением (влево) от конца Haystack. Например, 0 означает старт с последнего символа, а -1 с предпоследнего. Если смещение выходит за начало Haystack, поиск проводится по всей строке.

Независимо от значения StartingPosition, возвращается всегда копия Haystack полностью, просто чем больше StartingPosition, тем большая часть от начала Haystack останется нетронутой.

ErrorLevel

Принимает одно из следующих значений:

Опции

Смотрите раздел "Опции" в статье RegExMatch()" — там описаны модификаторы шаблонов, влияющие на поиск, такие как "i)abc", который включает независимость от регистра для шаблона "abc" (прим. переводчика: конкретно опция i для русских букв не действует).

Производительность

Для замены простых подстрок используйте StringReplace, т.к. она работает быстрее, чем RegExReplace().

Если вам известно максимально возможное число замен, то задав его в параметре Limit, вы можете улучшить производительность, поскольку это позволит раньше прекратить поиск (также это может снизить использование памяти). Например, если вы знаете, что может быть только одно совпадение близко к началу длинной строки, задайте Limit как 1.

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

Примечания

Большинство символов, таких как abc123, могут использоваться внутри регулярных выражений буквально. Однако символам \ . * ? + [ { | ( ) ^ $ должна предшествовать левая наклонная черта, чтобы они воспринимались как литеральные. Например, \. — это литеральная точка, а \\ — литеральная левая наклонная. Экранирования можно избежать, если использовать \Q...\E. Например: \QЛитеральный текст\E.

Внутри регулярного выражения специальные символы, такие как табуляция и новая строка, могут экранироваться либо акцентом (`), либо левой наклонной чертой (\). Например, `t — то же самое, что \t.

Основы синтаксиса регулярных выражений описаны в статье Регулярные выражения (RegEx) - краткий справочник

Примеры

NewStr := RegExReplace("abc123123", "123$", "xyz")  ; Вернёт "abc123xyz", т.к. $ привязывает шаблон к концу строки.
NewStr := RegExReplace("abc123", "i)^ABC")  ; Вернёт "123", т.к. благодаря опции i регистр не учитывается.
NewStr := RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")  ; Вернёт "aaaXYZzzz" за счёт вставки найденной
                                                               ; подстроки по обратной ссылке $1.
NewStr := RegExReplace("abc123abc456", "abc\d+", "", ReplacementCount)  ; Вернёт "" и поместит 2 в ReplacementCount.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2009 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.