<< Click to Display Table of Contents >> Navigation: Раздел 3 Пользовательский интерфейс ''Конфигуратора'' > Поиск > Поиск с помощью регулярных выражений |
Регулярные выражения используются для осуществления поиска строк в тексте. По сути, регулярное выражение – это строка-образец (или шаблон, маска), состоящая из символов и знаков, и задающая правило поиска. Распространенными знаками регулярных выражений являются знаки "?" и "*", которые используются для представления одиночных символов или групп символов.
Регулярные выражения можно использовать только в поле "Искать" (см. рис. "Окно "Поиск" закладка "Поиск""). В поле "Заменить" регулярные выражения не распознаются, и введенные данные всегда воспринимаются как обычный текст. Далее перечислены основные виды регулярных выражений, которые могут быть использованы при поиске в "Конфигураторе".
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. В первую очередь проверяется на соответствие крайнее слева слово.