Поиск с помощью регулярных выражений
Регулярные выражения используются для осуществления поиска строк в тексте. По сути, регулярное выражение – это строка-образец (или шаблон, маска), состоящая из символов и знаков, и задающая правило поиска. Распространенными знаками регулярных выражений являются знаки «?» и «*», которые используются для представления одиночных символов или групп символов.
Регулярные выражения можно использовать только в поле «Искать». В поле «Заменить» регулярные выражения не распознаются, и введенные данные всегда воспринимаются как обычный текст. Далее перечислены основные виды регулярных выражений, которые могут быть использованы при поиске в «Конфигураторе».
Escape-знак «\» (одиночная обратная косая черта) – это знак, который указывает на то, что следующий за ним знак не является оператором. Например, звездочка (*) интерпретируется как знак, замещающий любую группу символов, а звездочка, перед которой стоит знак обратной косой черты (\*) – как знак «*» внутри текста. Примеры escape-знаков приведены в нижеследующей таблице. В таблице в столбце «Описание» для некоторых знаков приведены кодовые значения символов в международной кодировке Unicode (формат кодов UTF-16).
Таблица. Примеры использования escape-знаков
Escape-знак | Описание |
---|---|
Обычные знаки | Все знаки, кроме «.», «$», «^», «{», «[», «(», «|», «)», «*», «+», «?» и «\» соответствуют сами себе. |
\t | Соответствует знаку табуляции \u0009. |
\r | Соответствует знаку возврата каретки \u000D. |
\n | Соответствует знаку новой строки \u000A. |
\040 | Соответствует знаку ASCII как восьмеричному числу (до трех разрядов). Например, знак \040 соответствует пробелу. |
\x20 | Соответствует знаку ASCII в шестнадцатеричном представлении (строго две цифры). |
\cC | Соответствует управляющему знаку ASCII. Например, \cC – «Ctrl + C». |
\u0020 | Соответствует знаку Юникода в шестнадцатеричном представлении (строго четыре цифры). |
\ | Со следующим знаком, который не распознается как escape-знак, соответствует этому знаку. Например, выражение \* совпадает с выражением \x2A. |
Примеры:
1. Если в строке поиска задано выражение «а\tб», то будет найдена следующая строка:
«а б» (Т.е. строка, в которой между символами «а» и «б» стоит знак табуляции).
1. Если в строке поиска задано выражение «Тогда\r», то будут найдена следующая строка:
«Тогда
»
(Т.е. строка, в которой после слова «Тогда» стоит возврат каретки).
2. Если в строке поиска задано выражение «\u0028смещение\u0029», то будет найдена строка «(смещение)». Т.е. найдена строка, в которой слово «смещение» заключено в круглые скобки. «u0028» – код знака открывающей скобки, а «u0029» – закрывающей скобки.
Класс знаков представляет собой набор знаков, который можно сопоставить с искомой строкой. Буквенные знаки, escape-знаки и классы знаков можно объединять для создания шаблона регулярного выражения. Описание и синтаксис классов знаков приведены в нижеследующей таблице.
Таблица. Классы знаков и их синтаксис
Класс знаков | Описание |
---|---|
[группа_знаков] | Группа положительных знаков. Группа знаков состоит из одного или нескольких буквенных знаков, escape-знаков, диапазонов знаков или сцепленных классов знаков. Например, чтобы указать все гласные, можно использовать код [aeiou]. Чтобы указать все знаки препинания и десятичные числа используется [\p{P}\d]. |
[^группа знаков] | Группа отрицательных знаков. Группа знаков состоит из одного или нескольких буквенных знаков, escape-знаков, диапазонов знаков или сцепленных классов знаков. Начальный знак (^) является обязательным и указывает на то, что группа знаков представляет собой группу отрицательных знаков, а не положительных. Например, чтобы указать все знаки, кроме гласных, используется код [^aeiou]. Чтобы задать все знаки, кроме знаков препинания и десятичных чисел, используйте [^\p{P}\d]. |
[первыйЗнак-последнийЗнак] | Диапазон знаков. Диапазон знаков – это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними. Два знака являются непрерывными, если они имеют соседние кодовые точки в Юникоде. Два или более диапазона знаков могут быть сцеплены. Например, чтобы задать диапазон десятичных цифр от «0» до «9», диапазон строчных букв от «a» до «f» и диапазон прописных букв от «A» до «F» используйте [0-9a-fA-F]. |
. | Точка. Соответствует любому знаку, кроме \n. Точка в положительной или отрицательной группе знаков (знак в квадратных скобках) рассматривается как изменяемый буквенный знак, а не как класс знаков. |
\p{имя} | Соответствует всем знакам в общей категории Юникода или в именованном блоке, указанном в параметре «Имя». |
\P{имя} | Соответствует всем знакам, отсутствующим в общей категории Юникода или в именованном блоке, указанном в параметре «Имя». |
\w | Соответствует любому алфавитно-цифровому знаку. Эквивалентно [a-zA-Z_0-9]. |
\W | Соответствует любому знаку, не являющемуся цифрой или буквой. Эквивалентно [^a-zA-Z_0-9]. |
\s | Соответствует любому знаку пробела. |
\S | Соответствует любому знаку, не являющемуся пробелом. |
\d | Соответствует любой десятичной цифре. Эквивалентно [0-9]. |
\D | Соответствует любому знаку, не являющемуся цифрой. Эквивалентно [^0-9]. |
Примеры:
1. Если в строке поиска задано выражение «([абв])», то будут найдены следующие строки: «(а)», «(б)», «(в)». (Т.е. строки, в которых символ «а», «б» или «в» заключен в скобки).
2. Если в строке поиска задано выражение «\Wсмещение\W», то в строке «СпрОС.УстановитьСмещение(смещение);» будет найдена строка: «(смещение)». А в строке « смещение=0;» будет найдена строка: «_смещение=». (Т.е. слово «смещение», перед которым и после которого стоят знаки, не являющиеся цифрой или буквой).
3. Если в строке поиска задано выражение «возврат \d», то будут найдены следующие строки: «возврат 0», «возврат 6». Т.е. строки, в которых после слова «возврат » стоит цифра.
Служебные символы, описанные в следующей таблице, указывают, считается ли найденное соответствие действительным или недействительным, в зависимости от его текущего положения в строке. Например, знак (^) означает текущее положение в начале строки или текста. Таким образом, регулярное выражение ^FTP возвращает только те последовательности знаков «FTP», которые встречаются в начале строки.
Таблица. Знаки, указывающие на положение совпадения в строке
Знак | Описание |
---|---|
^ | Указывает, что совпадение должно находиться в начале текста или строки. |
$ | Указывает, что совпадение должно находиться в конце строкового значения, перед \n в конце строки или в конце текста. |
\A | Указывает, что соответствие должно находиться в начале строки |
\Z | Указывает, что соответствие должно находиться в конце строки или перед \n в конце строки |
\z | Указывает, что соответствие должно находиться в конце строки |
\G | Указывает, что соответствие должно находиться в той точке, где заканчивается предыдущее соответствие. |
\b | Указывает, что соответствие должно находиться на границе между знаками \w (алфавитно-цифровыми) и \W (не алфавитно-цифровыми). Эти соответствия должны быть на границах слов (то есть на первом и последнем знаках в словах, разделенных знаками, не являющимися буквами или цифрами). Соответствие может также находиться на границе слова в конце строки. |
\B | Указывает, что соответствие не должно находиться на границе \b. |
Примеры:
1. Если в строке поиска задано выражение «\Aзапись», то в строках:
«запись = Новый("ДанныеТаблСтроки");»;
«запись.УстановитьТипЯчейки("строка").» будут найдены слова »запись». (В перечисленных строках слова «запись» находятся в начале строки)
2. Если в строке поиска задано выражение «\bСписок », то в строке «Для каждого ТекОС из ОССписок Цикл» будет найдена строка «Список». Слово «Список» находится между алфавитными символами и не алфавитными, т.е. в строке перед словом стоят буквы, а после – пробел).
3. Если в строке поиска задано выражение «\BЦикл», то в строке «КонецЦикла» будет найдена строка: «Цикл». Слово «Цикл» в строке находится между алфавитными символами.
Специальный знак «|» изменяет регулярное выражение так, что оно может сопоставляться по принципу «или-или». Знак «|» означает, что искомая строка соответствует любому из элементов, разделенных «|» (вертикальной чертой). Например, ftp|http|www. В первую очередь проверяется на соответствие крайнее слева слово.