Образец
Стд::РегулярныеВыражения::Образец Базовые типы: Объект |
Иерархия типа
graph TD;
Образец-->Объект;
Регулярное выражение.
В таблице ниже перечислены все возможные конструкции для построения регулярных выражений.
Конструкция (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 "