Образец
| Стд::РегулярныеВыражения::Образец Базовые типы: Объект |
| Доступность: КлиентИСервер |
Регулярное выражение.
В таблице ниже перечислены все возможные конструкции для построения регулярных выражений.
| Конструкция (EN) | Конструкция (RU) | Описание |
|---|---|---|
| Символы | ||
| x | х | Символ x |
| \ | \ | Символ обратной косой черты |
| \uhhhhh | \юhhhhh | Код символа в Юникод с десятеричным значением hhhhh |
| \t | \т | Символ табуляции (‘\u0009’) |
| \n | \н | Символ перевода строки (‘\u000A’) |
| \r | \в | Символ возврата каретки (‘\u000D’) |
| Классы символов | ||
| [abc] | [абв] | a, b, или c. Содержимое внутри квадратных скобок не должно быть пустым ([] - запрещено) |
| [^abc] | [^абв] | Любой символ, кроме a, b, or c (отрицание). Содержимое внутри квадратных скобок не должно быть пустым ([^] - запрещено) |
| [a-zA-Z] | [а-яА-я] | Символы в диапазоне от a до z или от A до Z (диапазоны). Содержимое внутри квадратных скобок не должно быть пустым ([] - запрещено) |
| Заранее обозначенные символьные классы | ||
| . | . | Любой символ, кроме терминаторов строк. |
| \d | \ц | Какая-либо цифра: [0-9] |
| \D | \Ц | Не цифра: [^0-9] |
| \s | \п | Пробельный символ: [\t-\r\u0020\u00A0\u1680\u2000-\u2009\u200A\u202F\u205F\u2028\u2029\u3000] |
| \S | \П | Не пробельный символ: [^\t-\r\u0020\u00A0\u1680\u2000-\u2009\u200A\u202F\u205F\u2028\u2029\u3000] |
| \w | \с | Символ, допустимый в словах: [_a-zA-Z0-9\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u318F\u3300-\u33ss\u3400-\u3D2D\u4E00-\u9FFF\uF900-\uFAFF] |
| \W | \С | Символы, не участвующие в словах: [^_a-zA-Z0-9\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u318F\u3300-\u33ss\u3400-\u3D2D\u4E00-\u9FFF\uF900-\uFAFF] |
| Символы-соответствия границ | ||
| ^ | ^ | Начало строки |
| $ | $ | Конец строки |
| Жадные квантификаторы (находят совпадения максимально возможной длины) (X – некоторая исчисляемая конструкция) | ||
| X? | X? | X встречается один раз, или не встречается вообще |
| X* | X* | X ноль или больше раз |
| X+ | X+ | X один или больше раз |
| X{n} | X{n} | X ровно n раз |
| X{n,} | X{n,} | X хотя бы n раз |
| X{n,m} | X{n,m} | X хотя бы n, но не более m раз |
| Ленивые квантификаторы (находят совпадения минимально возможной длины) (X – некоторая исчисляемая конструкция) | ||
| X?? | X?? | X встречается один раз, или не встречается вообще |
| X*? | X*? | X ноль или больше раз |
| X+? | X+? | X один или больше раз |
| X{n}? | X{n}? | X ровно n раз |
| X{n,}? | X{n,}? | X хотя бы n раз |
| X{n,m}? | X{n,m}? | X хотя бы n, но не более m раз |
| Логические операции (X, Y – некоторая конструкция или набор конструкций) | ||
| XY | XY | X обязан следовать за Y |
| X|Y | X|Y | Либо X либо Y (предпочтительнее X) |
| (X) | (X) | X в качестве группы захвата |
| Обратные ссылки | ||
| \n | \n | То же соответствие, что было найдено группой захвата с номером n Пример: Регулярное выражение: ‘(\w)\1’ Строка: “aa ab ba bb” Будет два совпадения – “aa”, “bb”, так как регулярное выражение, по сути, находит две подряд идущие одинаковые буквы. (\w) соответствует любой букве, а \1 является обратной ссылкой на группу захвата, и отвечает за соответствие той же букве, что и группа захвата. Если номер группы n превышает количество групп захвата, объявленных до обратной ссылки, то пользователю выбрасывается исключение ИсключениеНекорректноеРегулярноеВыражение. В случае, когда необходимо указать номер группы, а затем число (например, всего захваченных групп 12, а нам нужно сделать обратную ссылку на первую группу, а после этого сразу проверить, что идёт число 0 - стоит выделить обратную ссылку в отдельную группу). Пример: “(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(?:\1)0” Строка-совпадение: “abcdefghijkla0” |
| \k | \и<имя>имя> | То же соответствие, что было найдено группой захвата с именем name Пример: Регулярное выражение: ‘(? Строка: “aa ab ba bb” Будет два совпадения – “aa”, “bb”, так как регулярное выражение, по сути, находит две подряд идущие одинаковые буквы. (\w) соответствует любой букве, а \k Правила задания имени: имя может состоять только из строчных и заглавных букв латинского и русского алфавита, также допустимы цифры и символ нижнего подчеркивания '_'. Имя не может начинаться с цифры. Если ссылка указывает на группу захвата, которая не была объявлена до ссылки, то пользователю выбрасывается ошибка ИсключениеНекорректноеРегулярноеВыражение. |
| Экранирование | ||
| \ | \ | Экранирует следующий символ. |
| Специальные конструкции (X – некоторая конструкция или набор конструкций) | ||
| (? | (?<имя>X)имя> | X, как именованная группа захвата с именем name |
| (?:X) | (?:X) | X, как не группа захвата |
| (?=X) | (?=X) | X, как проверка присутствия с просмотром вперед. Сопоставленная строка НЕ включается в совпадение. Данная конструкция не является группой захвата. Пример: Регулярное выражение: ‘\w+(?=a)’. Строка: “bba bbb cda efd” Будет два совпадения – “bb” и “cd”, так как совпадением в данном случае является любой набор букв, в конце которого стоит буква “a”. |
| (?!X) | (?!X) | X, как проверка отсутствия с просмотром вперед. Сопоставленная строка НЕ включается в совпадение. Данная конструкция не является группой захвата. Пример: Регулярное выражение: ‘[bcd]{2}(?!a)’. Строка: “bca dcb dba bdf”. Будет два совпадения – “dc” и “bd”, так как совпадением в данном случае является любой набор из двух букв b, с или d, после которого не стоит буква “a”. |
| (?ims) | (?рмо) | Указывается только в конце регулярного выражения. Включает флаги-настройки поиска. Пример: ‘\w+(?im)’ |
В таблице ниже перечислены все возможные флаги-настройки поиска.
| Сокращение (EN) | Сокращение (RU) | Описание |
|---|---|---|
| i | р | Включает режим регистронезависимого поиска. То есть при выполнении операций поиска, замены, разбиения регистр символов игнорируется. |
| m | м | Многострочный режим. Изменяет значение символов “^” и “$” так, что они совпадают, соответственно, с началом и концом любой строки, а не только с началом и концом всего текста. |
| s | о | Указывает однострочный режим. Изменяет значение точки (.) так, что она соответствует любому символу (вместо любого символа, кроме терминаторов строк). |
Сравнение ссылочное
Примеры
// Пример создания образца для поиска номеров телефона, удовлетворяющих следующим шаблонам:
// 1) +7(XXX)XXX-XX-XX
// 2) 8(XXX)XXX-XX-XX
// где вместо X подставляется любая цифра от 0 до 9.
знч ОбразецДляПоискаТелефонов = новый Образец("(\\+7|8)\\(\\ц{3}\\)\\ц{3}(-\\ц{2}){2}")
// Данное объявление равносильно объявлению через литерал:
знч ОбразецДляПоискаТелефоновЛитерал = '(\+7|8)\(\ц{3}\)\ц{3}(-\ц{2}){2}'
Литералы
Синтаксис: '\<Cодержимое образца\>', где <Cодержимое образца> - строка, задающая корректный образец, используя конструкции приведенные выше.
Экранирование в литерале выполняется с помощью одиночной обратной косой черты \.
Конструкторы
Образец
| Образец(РегулярноеВыражение: Строка) |
| Доступность: КлиентИСервер |
Конструирование образца регулярного выражения из исходной строки РегулярноеВыражение.
В случае некорректности регулярного выражения выбрасывается ИсключениеНекорректноеРегулярноеВыражение.
Методы
ВСтроку
Возвращает исходное регулярное выражение, из которого был сконструирован объект.
КоличествоГрупп
| КоличествоГрупп(): Число |
| Доступность: КлиентИСервер |
Возвращает количество групп захвата в образце.
НайтиСовпадения
| НайтиСовпадения(Строка: Строка, КоличествоСовпадений: Число = 0): Массив<Совпадение> |
| Доступность: КлиентИСервер |
Позволяет найти первые КоличествоСовпадений совпадений в строке Строка. Возвращает массив с описанием этих совпадений в объектах Match.
В случае отсутствия соответствий возвращаемый массив будет пустым.
Если cуммарно в строке Строка совпадений меньше, чем КоличествоСовпадений, то массив будет размера - суммарное количество совпадений в строке Строка.
Если величина КоличествоСовпадений = 0, то выполняется поиск всех совпадений в строке Строка.
В случае, если величина КоличествоСовпадений < 0, то выбрасывается исключение ИсключениеНедопустимыйАргумент.
Примеры
Пусть есть строка:
знч ТестоваяСтрока = "1-один; 2-два; 3-три; 4-четыре; 5-пять"
Из строки нужно получить все сочетания вида “<цифра>-<название>". Для этого воспользуемся регулярным выражением с группами захвата:название>цифра>
// Создаем образец, позволяющий находить сочетания
знч ОбразецДляПоискаСочетаний = '(?<Цифра>\ц)-(?<Название>\с+)'
// Находим все сочетания в строке
знч РезультатПоиска = ОбразецДляПоискаСочетаний.НайтиСовпадения(ТестоваяСтрока)
// В РезультатПоиска содержатся все совпадения - можем их перебрать и получить новую строку вида "один:1 два:2 три:3 четыре:4 пять:5 "
пер НоваяСтрока = ""
для ОчереднойРезультат из РезультатПоиска
НоваяСтрока += ОчереднойРезультат.Группа("Название") + ":" + ОчереднойРезультат.Группа("Цифра") + " "
;
// В итоге НоваяСтрока будет равна "один:1 два:2 три:3 четыре:4 пять:5 "