Spec-Zone.ru › Tcl/Tk

regexp

ИМЯ
regexp — Сопоставление регулярного выражения со строкой
СИНТАКСИС
ОПИСАНИЕ
-about
-expanded
-indices
-line
-linestop
-lineanchor
-nocase
-all
-inline
-start index
--
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

regexp — Сопоставление регулярного выражения со строкой

Синтаксис

regexp ?переключатели? выражение строка ?переменная_совпадения? ?переменная_подстроки_совпадения подстроки_совпадения ...?

Описание

Определяет, соответствует ли регулярное выражение выражение части или всей строке, и возвращает 1, если соответствует, и 0, если не соответствует, если не указан переключатель -inline (см. ниже). (Сопоставление с регулярными выражениями описано на странице справки re_syntax.)

Если после строки указаны дополнительные аргументы, они рассматриваются как имена переменных, в которых будет возвращена информация о том, какая часть(и) строки соответствовала выражению. переменная_совпадения будет установлена в диапазон строки, который соответствовал всему выражению. Первая переменная_подстроки_совпадения будет содержать символы в строке, которые соответствуют левому скобочному подвыражению в выражении, следующая переменная_подстроки_совпадения будет содержать символы, которые соответствуют следующему скобочному подвыражению справа в выражении, и так далее.

Если начальные аргументы для regexp начинаются с -, они интерпретируются как переключатели. В настоящее время поддерживаются следующие переключатели:

-about
Вместо попытки сопоставить регулярное выражение, возвращает список, содержащий информацию о регулярном выражении. Первый элемент списка — количество подвыражений. Второй элемент — список имён свойств, описывающих различные атрибуты регулярного выражения. Этот переключатель предназначен в основном для отладки.
-expanded
Включает использование расширенного синтаксиса регулярных выражений, где пробелы и комментарии игнорируются. Это то же самое, что указание встроенного параметра (?x) (см. справку по re_syntax).
-indices
Изменяет то, что хранится в переменная_совпадения и переменная_подстроки_совпадения. Вместо хранения соответствующих символов из строки, каждая переменная будет содержать список из двух десятичных строк, дающих индексы в строке первого и последнего символов в сопоставленном диапазоне символов.
-line
Включает чувствительность к переводу строки при сопоставлении. По умолчанию перевод строки — это обычный символ без специального значения. С этим флагом “[^” выражения скобок и “.” никогда не сопоставляются с переводом строки, “^” сопоставляет пустую строку после любого перевода строки, помимо его обычной функции, и “$” сопоставляет пустую строку перед любым переводом строки, помимо его обычной функции. Этот флаг эквивалентен указанию как -linestop, так и -lineanchor, или встроенного параметра (?n) (см. справку по re_syntax).
-linestop
Изменяет поведение “[^” выражений скобок и “.” таким образом, что они останавливаются на переводах строк. Это то же самое, что указание встроенного параметра (?p) (см. справку по re_syntax).
-lineanchor
Изменяет поведение “^” и “$” («якорей») таким образом, что они соответствуют началу и концу строки соответственно. Это то же самое, что указание встроенного параметра (?w) (см. справку по re_syntax).
-nocase
Приводит к тому, что символы верхнего регистра в строке обрабатываются как символы нижнего регистра во время процесса сопоставления.
-all
Приводит к тому, что регулярное выражение сопоставляется с заданной строкой как можно больше раз, возвращая общее количество найденных совпадений. Если это указано вместе с переменными сопоставления, они будут содержать информацию только для последнего сопоставления.
-inline
Приводит к тому, что команда возвращает, как список, данные, которые в противном случае помещаются в переменные сопоставления. При использовании -inline переменные сопоставления указывать нельзя. Если используется с -all, список будет конкатенирован на каждой итерации, так что всегда возвращается плоский список. На каждой итерации сопоставления команда будет добавлять данные общего сопоставления, а также по одному элементу для каждого подвыражения в регулярном выражении. Примеры:
-start индекс
Указывает смещение по индексу символа в строке, с которого следует начинать сопоставление регулярного выражения. Значение индекс интерпретируется так же, как и аргумент индекс для команды string index. При использовании этого переключателя “^” не будет соответствовать началу строки, а \A по-прежнему будет соответствовать началу строки в позиции индекс. Если указан -indices, индексы будут пронумерованы, начиная с абсолютного начала входной строки. индекс будет ограничен границами входной строки.
--
Помечает конец переключателей. Аргумент, следующий за этим, будет обрабатываться как выражение, даже если он начинается с -.

Если переменных_подстроки_совпадения больше, чем скобочных подвыражений в выражении, или если конкретное подвыражение в выражении не соответствует строке (например, потому, что оно было в части выражения, которая не соответствовала), соответствующая переменная_подстроки_совпадения будет установлена в «-1 -1», если указан -indices, или в пустую строку в противном случае.

Примеры

Найдите первое вхождение слова, начинающегося со foo, в строке, которое фактически не является экземпляром foobar, и получите буквы, следующие за ним, до конца слова, в переменную:
regexp {\mfoo(?!bar\M)(\w*)} $string -> restOfWord

Обратите внимание, что вся сопоставленная подстрока помещена в переменную «->», которая выбрана для наглядности, поскольку нас на самом деле не интересует её содержимое.

Найдите индекс слова badger (любой регистр) в строке и сохраните его в переменной location:

regexp -indices {(?i)\mbadger\M} $string location

Это также можно записать как регулярное выражение базового типа (в отличие от использования синтаксиса по умолчанию расширенных регулярных выражений) сопоставления, добавив соответствующий флаг:

regexp -indices {(?ib)\<badger\>} $string location

Это подсчитывает количество восьмеричных цифр в строке:

regexp -all {[0-7]} $string

Это выводит все слова (состоящие из последовательностей всех не-пробельных символов) в строке и полезно как более мощная версия команды split:

regexp -all -inline {\S+} $string

См. также

re_syntax, regsub, string

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/regexp.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/regexp.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API