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' соответствует символу запятой, заданному как hex 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.

Интерполяционные утверждения

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

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

Интерполяционная заявка

Описание

Пример

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)' соответствует однозначным числам (цифрам, которые не предшествуют или следуют другим цифрам).

Если вы задаете значения перед выражением, операция эквивалентна логической 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)

Метасимвол, заданное как разделенная разделенными запятой парами, состоящая из 'Anchors' и одно из следующих значений:

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

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

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

свернуть все

Шаблон выражения, возвращенный как pattern объект.

Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте