Link Search Menu Expand Document

Образец

Стд::РегулярныеВыражения::Образец
Базовые типы: Объект

Иерархия типа

graph BT;
Образец-->Объект;

Регулярное выражение.

В таблице ниже перечислены все возможные конструкции для построения регулярных выражений.

Конструкция (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
Пример:
Регулярное выражение: ‘(?\w)\k'
Строка: “aa ab ba bb”
Будет два совпадения – “aa”, “bb”, так как регулярное выражение, по сути, находит две подряд идущие одинаковые буквы. (\w) соответствует любой букве, а \k является именованной обратной ссылкой на именованную группу захвата, и отвечает за соответствие той же букве, что и именованная группа захвата.
Правила задания имени: имя может состоять только из строчных и заглавных букв латинского и русского алфавита, также допустимы цифры и символ нижнего подчеркивания '_'. Имя не может начинаться с цифры.
Если ссылка указывает на группу захвата, которая не была объявлена до ссылки, то пользователю выбрасывается ошибка ИсключениеНекорректноеРегулярноеВыражение.
Экранирование    
\ \ Экранирует следующий символ.
Специальные конструкции (X – некоторая конструкция или набор конструкций)    
(?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. В случае отсутствия соответствий возвращаемый массив будет пустым.

Если суммарно в строке Строка совпадений меньше, чем КоличествоСовпадений, то массив будет размера - суммарное количество совпадений в строке Строка. Если величина КоличествоСовпадений = 0, то выполняется поиск всех совпадений в строке Строка.

Исключения

ИсключениеНедопустимыйАргумент - если КоличествоСовпадений < 0.

Примеры

Пусть есть строка:

знч ТестоваяСтрока = "1-один; 2-два; 3-три; 4-четыре; 5-пять"

Из строки нужно получить все сочетания вида “<цифра>-<название>". Для этого воспользуемся регулярным выражением с группами захвата:

// Создаем образец, позволяющий находить сочетания
знч ОбразецДляПоискаСочетаний = '(?<Цифра>\ц)-(?<Название>\с+)'

// Находим все сочетания в строке
знч РезультатПоиска = ОбразецДляПоискаСочетаний.НайтиСовпадения(ТестоваяСтрока)

// В РезультатПоиска содержатся все совпадения - можем их перебрать и получить новую строку вида "один:1 два:2 три:3 четыре:4 пять:5 "
пер НоваяСтрока = ""
для ОчереднойРезультат из РезультатПоиска
    НоваяСтрока += ОчереднойРезультат.Группа("Название") + ":" + ОчереднойРезультат.Группа("Цифра") + " "
;
// В итоге НоваяСтрока будет равна "один:1 два:2 три:3 четыре:4 пять:5 "

Список унаследованных методов

Объект