Перейти к основному содержимому

Образец

Стд::РегулярныеВыражения::Образец

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

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

Конструкция (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 – некоторая конструкция или набор конструкций)
XYXYX обязан следовать за Y
X|YX|YЛибо X либо Y (предпочтительнее X)
(X)(X)X в качестве группы захвата
Обратные ссылки
\n\nТо же соответствие, что было найдено группой захвата с номером n <br> Пример: <br> Регулярное выражение: '(\w)\1' <br> Строка: “aa ab ba bb” <br> Будет два совпадения – “aa”, “bb”, так как регулярное выражение, по сути, находит две подряд идущие одинаковые буквы. (\w) соответствует любой букве, а \1 является обратной ссылкой на группу захвата, и отвечает за соответствие той же букве, что и группа захвата. Если номер группы n превышает количество групп захвата, объявленных до обратной ссылки, то пользователю выбрасывается исключение ИсключениеНекорректноеРегулярноеВыражение. <br> В случае, когда необходимо указать номер группы, а затем число (например, всего захваченных групп 12, а нам нужно сделать обратную ссылку на первую группу, а после этого сразу проверить, что идет число 0 - стоит выделить обратную ссылку в отдельную группу). <br> Пример: "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(?:\1)0" <br> Строка-совпадение: "abcdefghijkla0"
\k<name>\и<имя>То же соответствие, что было найдено группой захвата с именем name <br> Пример: <br> Регулярное выражение: '(?<test>\w)\k<test>' <br> Строка: “aa ab ba bb” <br> Будет два совпадения – “aa”, “bb”, так как регулярное выражение, по сути, находит две подряд идущие одинаковые буквы. (\w) соответствует любой букве, а \k<test> является именованной обратной ссылкой на именованную группу захвата, и отвечает за соответствие той же букве, что и именованная группа захвата. <br> Правила задания имени: имя может состоять только из строчных и заглавных букв латинского и русского алфавита, также допустимы цифры и символ нижнего подчеркивания '_'. Имя не может начинаться с цифры. <br> Если ссылка указывает на группу захвата, которая не была объявлена до ссылки, то пользователю выбрасывается ошибка ИсключениеНекорректноеРегулярноеВыражение.
Экранирование
\\Экранирует следующий символ.
Специальные конструкции (X – некоторая конструкция или набор конструкций)
(?<name>X)(?<имя>X)X, как именованная группа захвата с именем name
(?:X)(?:X)X, как не группа захвата
(?=X)(?=X)X, как проверка присутствия с просмотром вперед. Сопоставленная строка НЕ включается в совпадение. Данная конструкция не является группой захвата. <br> Пример: <br> Регулярное выражение: '\w+(?=a)'. <br> Строка: “bba bbb cda efd” <br> Будет два совпадения – “bb” и “cd”, так как совпадением в данном случае является любой набор букв, в конце которого стоит буква “a”.
(?!X)(?!X)X, как проверка отсутствия с просмотром вперед. Сопоставленная строка НЕ включается в совпадение. Данная конструкция не является группой захвата. <br> Пример: <br> Регулярное выражение: '[bcd]{2}(?!a)'. <br> Строка: “bca dcb dba bdf”. <br> Будет два совпадения – “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 "

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

Объект

ПолучитьТип, Представление