exponenta event banner

regexpPattern

Шаблон, соответствующий указанному регулярному выражению

Описание

пример

pat = regexpPattern(expression) создает образец, соответствующий регулярному выражению.

пример

pat = regexpPattern(expression,Name,Value) указывает дополнительные параметры с одним или несколькими аргументами пары имя-значение. Например, можно указать 'IgnoreCase' как true игнорировать регистр при сопоставлении..

Примеры

свернуть все

Использовать regexpPattern задание шаблонов с помощью регулярных выражений, которые могут использоваться в качестве входных данных для функций поиска текста.

Найти слова, начинающиеся с c, заканчивается на t, и содержат один или несколько гласных между ними.

txt = "bat cat can car coat court CUT ct CAT-scan";
expression = 'c[aeiou]+t';

Регулярное выражение 'c[aeiou]+t' задает этот шаблон:

  • c должен быть первым символом.

  • c за ним должен следовать один из символов внутри скобок, [aeiou].

  • Узор в скобках должен встречаться один или несколько раз, как указано + оператор.

  • t должен быть последним символом, без символов между узором в скобках и t.

Извлеките образец. Обратите внимание, слова CUT и CAT не совпадают, потому что они прописные.

pat = regexpPattern(expression);
extract(txt,pat)
ans = 2x1 string
    "cat"
    "coat"

Шаблоны, созданные с помощью regexpPattern может быть объединен с другими функциями шаблона для создания более сложных шаблонов. Использовать whitespacePattern и lettersPattern чтобы создать новый образец, который также совпадает со словами после совпадения регулярного выражения, а затем извлечь новый образец.

pat = regexpPattern(expression) + whitespacePattern + lettersPattern;
extract(txt,pat)
ans = 2x1 string
    "cat can"
    "coat court"

Создание строки, содержащей newline персонаж. Использовать регулярное выражение '.' для соответствия любому символу, кроме newline персонажи.

txt = "First Line" + newline + "Second Line"
txt = 
    "First Line
     Second Line"

expression = '.+';

Регулярное выражение '.+' соответствует одному или нескольким из любых символов, включая newline персонажи. Подсчитайте, сколько раз шаблон совпадает.

pat = regexpPattern(expression);
count(txt,pat)
ans = 1

Создать новый шаблон регулярного выражения, но на этот раз указать DotExceptNewline как true чтобы шаблон не совпадал newline персонажи. Подсчитайте, сколько раз шаблон совпадает.

pat = regexpPattern(expression,"DotExceptNewline",true);
count(txt,pat)
ans = 2

Создать txt в виде строки.

txt = "Hello World";

Выражение '. *' соответствует только отдельным символам из-за пробела между . и *. Создание шаблона, соответствующего регулярному выражению '. *', а затем извлеките шаблон.

expression = '. *';
pat = regexpPattern(expression);
extract(txt,pat)
ans = 10x1 string
    "H"
    "e"
    "l"
    "l"
    "o "
    "W"
    "o"
    "r"
    "l"
    "d"

Создать новый шаблон регулярного выражения, но на этот раз указать FreeSpacing как true для игнорирования пробелов в регулярном выражении. Извлеките новый образец.

pat = regexpPattern(expression,"FreeSpacing",true);
extract(txt,pat)
ans = 
"Hello World"

Найти слова, начинающиеся с c, заканчивается на t, и содержат один или несколько гласных между ними, независимо от падежа.

txt = "bat cat can car coat court CUT ct CAT-scan";
expression = 'c[aeiou]+t';

Регулярное выражение 'c[aeiou]+t' задает этот шаблон:

  • c должен быть первым символом.

  • c за ним должен следовать один из символов внутри скобок, [aeiou].

  • Узор в скобках должен встречаться один или несколько раз, как указано + оператор.

  • t должен быть последним символом, без символов между узором в скобках и t.

Извлеките образец. Обратите внимание, что слова CUT и CAT не совпадают, потому что они прописные.

pat = regexpPattern(expression);
extract(txt,pat)
ans = 2x1 string
    "cat"
    "coat"

Создать новый шаблон регулярного выражения, но на этот раз указать IgnoreCase как true игнорировать регистр с регулярным выражением. Извлеките новый образец.

pat = regexpPattern(expression,"IgnoreCase",true);
extract(txt,pat)
ans = 4x1 string
    "cat"
    "coat"
    "CUT"
    "CAT"

Метазнаки ^ и $ может использоваться для указания привязок линий или текстовых привязок. Поведение, которое regexpPattern использование определяется Anchors вариант.

Создать txt как строка, содержащая newline персонажи.

txt = "cat" + newline + "bat" + newline + "rat";

Регулярное выражение «^. +? $» соответствует одному или нескольким символам между двумя привязками. Создайте образец для этого регулярного выражения и укажитеAnchors как “text” чтобы якоря ^ и $ рассматривались как текстовые якоря. Извлеките образец.

expression = '^.+?$';
pat = regexpPattern(expression,"Anchors","text");
extract(txt,pat)
ans = 
    "cat
     bat
     rat"

Создать новый шаблон регулярного выражения, но на этот раз указать Anchors как “line” чтобы якоря ^ и $ рассматривались как якоря линий. Извлеките новый образец.

pat = regexpPattern(expression,"Anchors","line");
extract(txt,pat)
ans = 3x1 string
    "cat"
    "bat"
    "rat"

Входные аргументы

свернуть все

Регулярное выражение, указанное как символьный вектор, массив ячеек из символьных векторов или строковый массив. Каждое выражение может содержать символы, метасимволы, операторы, маркеры и флаги, определяющие шаблоны для сопоставления в str.

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

Метазнаки

Метасимволы представляют собой буквы, диапазоны букв, цифры и символы пробела. Используйте их для построения обобщенного образца символов.

Метахарактер

Описание

Пример

.

Любой отдельный символ, включая пробел

'..ain' соответствует последовательностям из пяти последовательных символов, которые заканчиваются на 'ain'.

[c1c2c3]

Любой символ, заключенный в квадратные скобки. Следующие символы обрабатываются буквально: $ | . * + ? и - если не используется для указания диапазона.

'[rp.]ain' матчи 'rain' или 'pain' или '.ain'.

[^c1c2c3]

Любой символ, не заключенный в квадратные скобки. Следующие символы обрабатываются буквально: $ | . * + ? и - если не используется для указания диапазона.

'[^*rp]ain' соответствует всем четырехбуквенным последовательностям, которые заканчиваются на 'ain', за исключением 'rain' и 'pain' и '*ain'. Например, он соответствует 'gain', 'lain', или 'vain'.

[c1-c2]

Любой символ в диапазоне cот 1 до c2

'[A-G]' соответствует одному символу в диапазоне A через G.

\w

Любой алфавитный, цифровой или символ подчеркивания. Для английских наборов символов, \w эквивалентно [a-zA-Z_0-9]

'\w*' определяет слово, состоящее из любой группы букв, цифр или символов подчеркивания.

\W

Любой символ, не являющийся алфавитным, цифровым или подчеркиванием. Для английских наборов символов, \W эквивалентно [^a-zA-Z_0-9]

'\W*' определяет термин, который не является словом, состоящим из какой-либо группы букв, цифр или символов подчеркивания.

\s

Любой символ пробела; эквивалентно [ \f\n\r\t\v]

'\w*n\s' совпадает со словами, которые заканчиваются буквой n, за которым следует символ пробела.

\S

Любой символ, отличный от пробела; эквивалентно [^ \f\n\r\t\v]

'\d\S' соответствует цифровой цифре, за которой следует любой символ, отличный от пробела.

\d

Любая цифровая цифра; эквивалентно [0-9]

'\d*' соответствует любому количеству последовательных цифр.

\D

Любой неигрирующий персонаж; эквивалентно [^0-9]

'\w*\D\>' соответствует словам, которые не заканчиваются цифровой цифрой.

\oN или \o{N}

Символ восьмеричного значения N

'\o{40}' соответствует символу пробела, определяемому восьмеричным 40.

\xN или \x{N}

Символ шестнадцатеричного значения N

'\x2C' соответствует запятой, определяемой шестнадцатеричным символом 2C.

Символьное представление

Оператор

Описание

\a

Аварийный сигнал (звуковой сигнал)

\b

Клавиша Backspace

\f

Веб-канал формы

\n

Новая линия

\r

Возврат каретки

\t

Горизонтальная вкладка

\v

Вертикальная вкладка

\char

Любой символ со специальным значением в регулярных выражениях, которые должны совпадать буквально (например, используйте \\ для сопоставления с одной обратной косой чертой)

Кванторы

Квантификаторы указывают, сколько раз шаблон должен присутствовать в соответствующем тексте. expr представляет любое регулярное выражение.

Квантор

Число выполнений выражения

Пример

expr*

0 или более раз последовательно.

'\w*' соответствует слову любой длины.

expr?

0 раз или 1 раз.

'\w*(\.m)?' соответствует словам, которые при необходимости заканчиваются расширением .m.

expr+

1 или более раз последовательно.

'<img src="\w+\.gif">' соответствует <img> HTML-тег, если имя файла содержит один или несколько символов.

expr{m,n}

По крайней мере m времена, но не более n раз за разом.

{0,1} эквивалентно ?.

'\S{4,8}' соответствует от четырех до восьми символов, не являющихся пробелами.

expr{m,}

По крайней мере m раз за разом.

{0,} и {1,} эквивалентны * и +соответственно.

'<a href="\w{1,}\.html">' соответствует <a> HTML-тег, если имя файла содержит один или несколько символов.

expr{n}

Точно n раз за разом.

Эквивалентно {n,n}.

'\d{4}' соответствует четырем последовательным цифрам.

Квантователи могут появляться в трех режимах, описанных в следующей таблице. q представляет любой из количественных показателей в предыдущей таблице.

Способ

Описание

Пример

exprq

Жадное выражение: соответствует как можно большему количеству символов.

Учитывая текст '<tr><td><p>text</p></td>', выражение '</?t.*>' соответствует всем символам между <tr и /td>:

'<tr><td><p>text</p></td>'

exprq?

Ленивое выражение: соответствует необходимому количеству символов.

Учитывая текст'<tr><td><p>text</p></td>', выражение '</?t.*?>' заканчивает каждое совпадение при первом появлении закрывающей угловой скобки (>):

'<tr>'   '<td>'   '</td>'

exprq +

Притяжательное выражение: максимально совпадать, но не повторять какие-либо части текста.

Учитывая текст'<tr><td><p>text</p></td>', выражение '</?t.*+>' не возвращает совпадения, поскольку закрывающая угловая скобка захватывается с помощью .*, и не повторяется.

Группирование операторов

Операторы группировки позволяют захватывать маркеры, применять один оператор к нескольким элементам или отключать обратное отслеживание в определенной группе. Маркеры - это части совпадающего текста, определяемые путем включения части регулярного выражения в круглые скобки.

Оператор группировки

Описание

Пример

(expr)

Группировка элементов выражения и маркеров захвата.

'Joh?n\s(\w*)' захватывает маркер, содержащий фамилию любого лица с именем John или Jon.

(?:expr)

Группировать, но не захватывать токены.

'(?:[aeiou][^aeiou]){2}' соответствует двум последовательным шаблонам гласного, за которым следует негласный, например 'anon'.

Без группировки, '[aeiou][^aeiou]{2}'соответствует гласному, за которым следуют два негласных.

(?>expr)

Группировать атомарно. Не выполняйте обратную трассировку внутри группы для завершения сопоставления и не захватывайте токены.

'A(?>.*)Z' не соответствует 'AtoZ', хотя 'A(?:.*)Z' делает. Используя атомную группу, Z захватывается с помощью .* и не повторяется.

(expr1|expr2)

Выражение соответствия expr1 или выражение expr2.

При совпадении с expr1, то expr2 игнорируется.

Можно включить ?: или ?> после открывающей круглой скобки подавлять токены или атомарно группировать.

'(let|tel)\w+' соответствует словам, которые начинаются с let или tel.

Якоря

Якоря в выражении соответствуют началу или концу входного текста или слова.

Якорь

Соответствует...

Пример

^expr

Начало входного текста.

'^M\w*' соответствует слову, начинающемуся с M в начале текста.

expr$

Конец входного текста.

'\w*m$' соответствует словам, заканчивающимся на m в конце текста.

\<expr

Начало слова.

'\<n\w*' соответствует любым словам, начинающимся с n.

expr\>

Конец слова.

'\w*e\>' соответствует любым словам, заканчивающимся на e.

Утверждения Lookaround

Утверждения lookaround ищут шаблоны, которые непосредственно предшествуют предполагаемому соответствию или следуют за ним, но не являются его частью.

Указатель остается в текущем местоположении, а символы соответствуют test выражения не захватываются и не отбрасываются. Поэтому утверждения lookahead могут совпадать с перекрывающимися группами символов.

Lookaround утверждение

Описание

Пример

expr(?=test)

Загляните вперед, чтобы найти совпадающие символы test.

'\w*(?=ing)' соответствует срокам, за которыми следуют ing, такие как 'Fly' и 'fall' во входном тексте 'Flying, not falling.'

expr(?!test)

Загляните вперед для символов, которые не совпадают test.

'i(?!ng)' соответствует экземплярам буквы i за которыми не следует ng.

(?<=test)expr

Искать совпадающие символы test.

'(?<=re)\w*' соответствует следующим условиям 're', такие как 'new', 'use', и 'cycle' во входном тексте 'renew, reuse, recycle'

(?<!test)expr

Искать символы, которые не совпадают test.

'(?<!\d)(\d)(?!\d)' соответствует однозначным числам (цифрам, которые не предшествуют или не следуют за другими цифрами).

Если перед выражением указать утверждение lookahead, операция эквивалентна логической AND.

Операция

Описание

Пример

(?=test)expr

Сопоставить оба test и expr.

'(?=[a-z])[^aeiou]' соответствует согласным.

(?!test)expr

Матч expr и не совпадают test.

'(?![aeiou])[a-z]' соответствует согласным.

Логические и условные операторы

Логические и условные операторы позволяют проверить состояние данного условия, а затем использовать результат, чтобы определить, какой шаблон, если он есть, будет соответствовать следующему. Эти операторы поддерживают логические OR, и if или if/else условия.

Условия могут быть маркерами, операторами поиска или динамическими выражениями формы (?@cmd). Динамические выражения должны возвращать логическое или числовое значение.

Условный оператор

Описание

Пример

expr1|expr2

Выражение соответствия expr1 или выражение expr2.

При совпадении с expr1, то expr2 игнорируется.

'(let|tel)\w+' соответствует словам, которые начинаются с let или tel.

(?(cond)expr)

Если условие cond является trueЗатем сопоставьте expr.

'(?(?@ispc)[A-Z]:\\)' соответствует имени диска, например C:\, при запуске в системе Windows ®.

(?(cond)expr1|expr2)

Если условие cond является trueЗатем сопоставьте expr1. В противном случае совпадение expr2.

'Mr(s?)\..*?(?(1)her|his) \w*' соответствует тексту, включающему her когда текст начинается с Mrs, или которая включает his когда текст начинается с Mr.

Операторы маркеров

Маркеры - это части совпадающего текста, определяемые путем включения части регулярного выражения в круглые скобки. Можно ссылаться на маркер по его последовательности в тексте (порядковый маркер) или назначать имена маркерам для упрощения обслуживания кода и удобочитаемого вывода.

Оператор маркера порядкового номера

Описание

Пример

(expr)

Зафиксируйте в маркере символы, соответствующие заключенному выражению.

'Joh?n\s(\w*)' захватывает маркер, содержащий фамилию любого лица с именем John или Jon.

Оператор именованного маркера

Описание

Пример

(?<name>expr)

Зафиксируйте в именованном маркере символы, соответствующие заключенному выражению.

'(?<month>\d+)-(?<day>\d+)-(?<yr>\d+)' создает именованные маркеры для месяца, дня и года в дате ввода формы mm-dd-yy.

Примечание

Если выражение имеет вложенные круглые скобки, MATLAB ® захватывает маркеры, соответствующие самому внешнему набору круглых скобок. Например, учитывая шаблон поиска'(and(y|rew))', MATLAB создает маркер для 'andrew' но не для 'y' или 'rew'.

Комментарии

Персонажи

Описание

Пример

(?#comment)

Вставка комментария в регулярное выражение. Текст комментария игнорируется при совпадении ввода.

'(?# Initial digit)\<\d\w+' включает комментарий и совпадает со словами, начинающимися с числа.

Флаги поиска

Флаги поиска изменяют поведение соответствующих выражений. Альтернативой использованию флага поиска в выражении является передача option входной аргумент.

Флаг

Описание

(?-i)

Совпадение буквенного регистра (по умолчанию для regexp и regexprep).

(?i)

Не соответствовать буквенному регистру (по умолчанию для regexpi).

(?s)

Точка совпадения (.) в шаблоне с любым символом (по умолчанию).

(?-s)

Сопоставьте точку в шаблоне с любым символом, который не является символом новой строки.

(?-m)

Сопоставить ^ и $ метасимволы в начале и конце текста (по умолчанию).

(?m)

Сопоставить ^ и $ метасимволы в начале и конце строки.

(?-x)

Включать символы пробела и комментарии при совпадении (по умолчанию).

(?x)

Игнорировать символы пробела и комментарии при сопоставлении. Использовать '\ ' и '\#' для соответствия пространству и # персонажи.

Выражение, которое изменяет флаг, может появиться после скобок, например

(?i)\w*

или внутри скобок и отделены от флага двоеточием (:), например,

(?i:\w*)

Последний синтаксис позволяет изменить поведение части большего выражения.

Типы данных: char | cell | string

Примечание

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'DotExceptNewline',true,'FreeSpacing',false

Сопоставление точек newline символ, указанный как пара, разделенная запятыми, состоящая из 'DotExceptNewline' и логический скаляр. Установите для этой опции значение 0 (false), чтобы пропустить newline символы из совпадения точек.

Пример: pat = regexpPattern('m.','DotExceptNewline',true)

Совпадающий символ пробела, указанный как разделенная запятыми пара, состоящая из 'FreeSpacing' и логический скаляр. Установите для этого параметра значение 1 (true), чтобы опустить пробелы и комментарии при сопоставлении.

Пример: pat = regexpPattern('m.','FreeSpacing',false)

Игнорировать регистр при совпадении, указанный как разделенная запятыми пара, состоящая из 'IgnoreCase' и логический скаляр. Установите для этого параметра значение 1 (true) для соответствия независимо от регистра.

Пример: pat = regexpPattern('m.','IgnoreCase',true)

Metacharacter-обработка, указанная как пара, разделенная запятыми, состоящая из 'Anchors' и одно из этих значений:

СтоимостьОписание
'text'Обработать метасимволы ^ и $ в качестве привязок к тексту. Это привязывает регулярное выражение к началу или концу текста, которое может охватывать несколько строк.
'line'Обработать метасимволы ^ и $ в качестве линейных якорей. Это привязывает регулярное выражение к началу или концу строк в тексте. Этот параметр полезен, если имеется многострочный текст и не требуется, чтобы совпадения охватывали несколько строк.

Пример: pat = regexpPattern('\d+','Anchors','line')

Выходные аргументы

свернуть все

Выражение шаблона, возвращаемое как pattern объект.

Представлен в R2020b