regexp

Соответствовать регулярному выражению (с учетом регистра)

Описание

пример

startIndex = regexp(str,expression) возвращает начальный индекс каждой подстроки str который соответствует шаблонам символов, заданным регулярным выражением. Если нет спичек, startIndex - пустой массив.

[startIndex,endIndex] = regexp(str,expression) возвращает начальный и конечный индексы всех совпадений.

пример

out = regexp(str,expression,outkey) возвращает выход, заданную как outkey. Для примера, если outkey является 'match', затем regexp возвращает подстроки, которые соответствуют выражению, а не их начальным индексам.

пример

[out1,...,outN] = regexp(str,expression,outkey1,...,outkeyN) возвращает выходы, заданные несколькими ключевыми словами выхода, в указанном порядке. Для примера, если вы задаете 'match', 'tokens', затем regexp возвращает подстроки, которые совпадают со всем выражением, и лексемы, которые совпадают с частями выражения.

пример

___ = regexp(___,option1,...,optionM) изменяет поиск с помощью флагов заданных опций. Для примера задайте 'ignorecase' для выполнения без учета регистра. Можно включить любой из входов и запросить любой из выходов из предыдущих синтаксисов.

пример

___ = regexp(___,'forceCellOutput') возвращает каждый выходной аргумент в виде скалярной камеры. Камеры содержат числовые массивы или подстроки, которые описаны как выходы предыдущих синтаксисов. Можно включить любой из входов и запросить любой из выходов из предыдущих синтаксисов.

Примеры

свернуть все

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

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression)
startIndex = 1×2

     5    17

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

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

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

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

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

Значения в startIndex указать индекс первого символа каждого слова, который совпадает с регулярным выражением. Соответствующее слово cat начинается с индекса 5 и coat начинается с индекса 17. Слова CUT и CAT не совпадают, потому что они заглавные.

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

str = {'Madrid, Spain','Romeo and Juliet','MATLAB is great'};
capExpr = '[A-Z]';
spaceExpr = '\s';

capStartIndex = regexp(str,capExpr);
spaceStartIndex = regexp(str,spaceExpr);

capStartIndex и spaceStartIndex являются массивами ячеек, потому что входной str - массив ячеек.

Просмотрите индексы для заглавных букв.

celldisp(capStartIndex)
 
capStartIndex{1} =
 
     1     9

 
 
capStartIndex{2} =
 
     1    11

 
 
capStartIndex{3} =
 
     1     2     3     4     5     6

 

Просмотрите индексы для пространств.

celldisp(spaceStartIndex)
 
spaceStartIndex{1} =
 
     8

 
 
spaceStartIndex{2} =
 
     6    10

 
 
spaceStartIndex{3} =
 
     7    10

 

Захватывайте слова в вектор символов, которая содержит букву x.

str = 'EXTRA! The regexp function helps you relax.';
expression = '\w*x\w*';
matchStr = regexp(str,expression,'match')
matchStr = 1x2 cell
    {'regexp'}    {'relax'}

Регулярное выражение '\w*x\w*' задает, что вектор символов:

  • Начинается с любого количества алфавитно-цифровых символов или символов подчеркивания, \w*.

  • Содержит строчную букву x.

  • Заканчивается любым количеством алфавитно-цифровых символов или символов подчеркивания после x, включая отсутствие, как указано \w*.

Разделите вектор символов на несколько подстрок, где каждая подстрока разделена ^ символ.

str = ['Split ^this text into ^several pieces'];
expression = '\^';
splitStr = regexp(str,expression,'split')
splitStr = 1x3 cell
    {'Split '}    {'this text into '}    {'several pieces'}

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

Захватывайте части вектора символов, которые совпадают с регулярным выражением, используя 'match' ключевое слово и оставшиеся части, которые не совпадают с использованием 'split' ключевое слово.

str = 'She sells sea shells by the seashore.';
expression = '[Ss]h.';
[match,noMatch] = regexp(str,expression,'match','split')
match = 1x3 cell
    {'She'}    {'she'}    {'sho'}

noMatch = 1x4 cell
    {0x0 char}    {' sells sea '}    {'lls by the sea'}    {'re.'}

Регулярное выражение '[Ss]h.' указывает, что:

  • S или s является первым символом.

  • h - второй символ.

  • Третий символ может быть любым, включая пространство, на что указывает точка (.).

Когда первый (или последний) символ в вектор символов соответствует регулярному выражению, первое (или последнее) возврат значение из 'split' ключевое слово является пустым символьным вектором.

Опционально соберите исходный вектор символов из подстрок.

combinedStr = strjoin(noMatch,match)
combinedStr = 
'She sells sea shells by the seashore.'

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

str = '<title>My Title</title><p>Here is some text.</p>';
expression = '<(\w+).*>.*</\1>';
[tokens,matches] = regexp(str,expression,'tokens','match');

Регулярное выражение <(\w+).*>.*</\1> задает этот шаблон:

  • <(\w+) находит открывающую угол скобку, за которой следуют один или несколько алфавитно-цифровых символов или символов подчеркивания. Входные \w+ в круглых скобках в лексему записывается имя HTML.

  • .*> находит любое количество дополнительных символов, таких как атрибуты HTML и закрывающая угловая скобка.

  • </\1> находит конечный тег, относящийся к первой лексеме (обозначается \1). Конечный тег имеет форму </tagname>.

Просмотрите лексемы и соответствующие подстроки.

celldisp(tokens)
 
tokens{1}{1} =
 
title
 
 
tokens{2}{1} =
 
p
 
celldisp(matches)
 
matches{1} =
 
<title>My Title</title>
 
 
matches{2} =
 
<p>Here is some text.</p>
 

Анализируйте даты, которые могут появиться с днем или месяцем первым, в следующих формах: mm/dd/yyyy или dd-mm-yyyy. Используйте именованные лексемы для идентификации каждой части даты.

str = '01/11/2000  20-02-2020  03/30/2000  16-04-2020';
expression = ['(?<month>\d+)/(?<day>\d+)/(?<year>\d+)|'...
              '(?<day>\d+)-(?<month>\d+)-(?<year>\d+)'];
tokenNames = regexp(str,expression,'names');

Регулярное выражение задает этот шаблон:

  • (?<name>\d+) находит одну или несколько числовых цифр и присваивает результат лексемы, обозначенной именем.

  • | - логический or оператор, который указывает, что существует два возможных шаблона для дат. В первом шаблоне косы (/) разделите лексемы. Во втором шаблоне дефисы (-) разделите лексемы.

Просмотрите именованные лексемы.

for k = 1:length(tokenNames)
   disp(tokenNames(k))
end
    month: '01'
      day: '11'
     year: '2000'

    month: '02'
      day: '20'
     year: '2020'

    month: '03'
      day: '30'
     year: '2000'

    month: '04'
      day: '16'
     year: '2020'

Найдите заглавный и строчный образцы слова.

По умолчанию regexp выполняет сопоставление с учетом регистра.

str = 'A character vector with UPPERCASE and lowercase text.';
expression = '\w*case';
matchStr = regexp(str,expression,'match')
matchStr = 1x1 cell array
    {'lowercase'}

Регулярное выражение задает, что вектор символов:

  • Начинается с любого количества алфавитно-цифровых символов или символов подчеркивания, \w*.

  • Заканчивается буквенным текстом case.

The regexpi функция использует тот же синтаксис, что и regexp, но выполняет аппроксимацию без учета регистра.

matchWithRegexpi = regexpi(str,expression,'match')
matchWithRegexpi = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

Также отключите соответствие с учетом регистра для regexp использование 'ignorecase' опция.

matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1x2 cell
    {'UPPERCASE'}    {'lowercase'}

Для нескольких выражений отключите сопоставление с учетом регистра для выбранных выражений с помощью (?i) флаг поиска.

expression = {'(?-i)\w*case';...
              '(?i)\w*case'};
matchStr = regexp(str,expression,'match');
celldisp(matchStr)
 
matchStr{1}{1} =
 
lowercase
 
 
matchStr{2}{1} =
 
UPPERCASE
 
 
matchStr{2}{2} =
 
lowercase
 

Создайте вектор символов, который содержит новую строку \n, и проанализировать его с помощью регулярного выражения. Начиная с regexp возвращает matchStr как массив ячеек, содержащий текст, который имеет несколько линии, можно вывести текст из массива ячеек, чтобы отобразить все линии.

str = sprintf('abc\n de');
expression = '.*';
matchStr = regexp(str,expression,'match');
matchStr{:}
ans = 
    'abc
      de'

По умолчанию точка (.) соответствует каждому символу, включая новую строку, и возвращает одно совпадение, эквивалентное исходному вектору символов.

Исключить символы новой строки из соответствия с помощью 'dotexceptnewline' опция. Это возвращает отдельные совпадения для каждой линии текста.

matchStrNoNewline = regexp(str,expression,'match','dotexceptnewline')
matchStrNoNewline = 1x2 cell
    {'abc'}    {' de'}

Найдите первый или последний символ каждой линии, используя ^ или $ метасимволы и 'lineanchors' опция.

expression = '.$';
lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 1x2 cell
    {'c'}    {'e'}

Поиск совпадений внутри фрагмента текста и возврат выхода в скалярную камеру.

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

str = 'bat cat can car coat court CUT ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexp(str,expression,'forceCellOutput')
startIndex = 1x1 cell array
    {[5 17]}

Чтобы получить доступ к стартовым индексам как к числовому массиву, индексируйте в камеру.

startIndex{1}
ans = 1×2

     5    17

Верните совпадающие и несоответствующие подстроки. Каждый выход находится в своей скалярной камере.

[match,noMatch] = regexp(str,expression,'match','split','forceCellOutput')
match = 1x1 cell array
    {1x2 cell}

noMatch = 1x1 cell array
    {1x3 cell}

Чтобы получить доступ к массиву соответствий, индексируйте в match.

match{1}
ans = 1x2 cell
    {'cat'}    {'coat'}

Чтобы получить доступ к несоответствующим подстрокам, индексируйте в noMatch.

noMatch{1}
ans = 1x3 cell
    {'bat '}    {' can car '}    {' court CUT ct C...'}

Входные параметры

свернуть все

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

Если str и expression Строковые массивы или массивы ячеек, они должны иметь одинаковые размерности.

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

Регулярное выражение, заданное как вектор символов, массив ячеек векторов символов или строковых массивов. Каждое выражение может содержать символы, метасимволы, операторы, лексемы и флаги, которые задают шаблоны, совпадающие с 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*

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.

\N

Соответствовать Nth token.

'<(\w+).*>.*</\1>' захватывает лексемы для HTML, таких как 'title' из текстовой '<title>Some text</title>'.

(?(N)expr1|expr2)

Если на Nнайден th лексема, затем совпадают expr1. В противном случае совпадает с expr2.

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

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

Описание

Пример

(?<name>expr)

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

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

\k<name>

Соответствовать лексеме, на которую ссылаются name.

'<(?<tag>\w+).*>.*</\k<tag>>' захватывает лексемы для HTML, таких как 'title' из текстовой '<title>Some text</title>'.

(?(name)expr1|expr2)

Если именованная лексема найдена, то совпадайте с expr1. В противном случае совпадает с expr2.

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

Примечание

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

Динамические регулярные выражения

Динамические выражения позволяют вам выполнить команду MATLAB или регулярное выражение, чтобы определить текст, который будет совпадать.

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

Оператор

Описание

Пример

(??expr)

Синтаксический анализ expr и включите получившийся термин в совпадающее выражение.

При анализе expr должно соответствовать полному, допустимому регулярному выражению. Динамические выражения, которые используют escape символ обратной косой черты (\) требуются две обратные косые черты: одна для начального разбора expr, и один для полного соответствия.

'^(\d+)((??\\w{$1}))' определяет, сколько символов должно совпадать, считывая цифру в начале соответствия. Динамическое выражение заключено во второй набор круглых скобок, так что полученное соответствие захватывается в лексему. Для образца, соответствие '5XXXXX' захватывает лексемы для '5' и 'XXXXX'.

(??@cmd)

Выполните команду MATLAB, представленную cmd, и включить выходы, возвращенные командой, в выражение соответствия.

'(.{2,}).?(??@fliplr($1))' находит палиндромы длиной не менее четырех символов, например 'abba'.

(?@cmd)

Выполните команду MATLAB, представленную cmd, но отменить любой выход, который возвращает команда. (Полезно для диагностики регулярных выражений.)

'\w*?(\w)(?@disp($1))\1\w*' соответствует словам, которые включают двойные буквы (такие как pp) и отображает промежуточные результаты.

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

Оператор замены

Описание

$& или $0

Фрагмент входного текста, которая в данный момент соответствует

$`

Фрагмент входного текста, которая предшествует текущему соответствию

$'

Фрагмент текста входа, который следует текущему соответствию (используйте $'' для представления $')

$N

Nth лексема

$<name>

Именованная лексема

${cmd}

Выход возвращен, когда MATLAB выполняет команду, cmd

Комментарии

Персонажи

Описание

Пример

(?#comment)

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

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

Флаги поиска

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

Флаг

Описание

(?-i)

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

(?i)

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

(?s)

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

(?-s)

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

(?-m)

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

(?m)

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

(?-x)

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

(?x)

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

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

(?i)\w*

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

(?i:\w*)

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

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

Ключевое слово, которое указывает, какие выходы возвращать, заданное как один из следующих векторов символов.

Ключевое слово выхода

Возвраты

'start' (по умолчанию)

Стартовые индексы всех совпадений, startIndex

'end'

Конечные индексы всех матчей, endIndex

'tokenExtents'

Стартовый и конечный индексы всех лексем

'match'

Текст каждой подстроки, которая соответствует шаблону в expression

'tokens'

Текст каждого захваченной лексемы в str

'names'

Имя и текст каждого именованной лексемы

'split'

Текст несоответствующих подстрок str

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

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

Дефолт

Отвергнуть

Описание

'all'

'once'

Совпадайте с выражением как можно больше раз (по умолчанию) или только один раз.

'nowarnings'

'warnings'

Подавить предупреждения (по умолчанию) или отобразить их.

'matchcase'

'ignorecase'

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

'noemptymatch'

'emptymatch'

Игнорируйте совпадения нулевой длины (по умолчанию) или включите их.

'dotall'

'dotexceptnewline'

Сопоставьте точку с любым символом (по умолчанию) или со всеми, кроме newline (\n).

'stringanchors'

'lineanchors'

Применить ^ и $ метасимволы - начало и конец вектора символов (по умолчанию), или начало и конец линии. The символа новой строки (\n) задает конец линии. Начало линии задается как первый символ или любой символ, который сразу же следует за символом новой строки.

'literalspacing'

'freespacing'

Включать символы и комментарии при соответствии (по умолчанию) или игнорировать их. С freespacing, использовать '\ ' и '\#' чтобы соответствовать пространству и # персонажи.

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

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

свернуть все

Стартовые индексы каждого соответствия, возвращенные как вектор-строка или массив ячеек, следующим образом:

  • Если str и expression являются векторами символов или строковыми скалярами, вывод представляет собой вектор-строку (или, если нет совпадений, пустой массив).

  • Если либо str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, выход - массив ячеек из векторов-строк. Выход массива ячеек имеет те же размерности что и вход массив.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

Конечный индекс каждого соответствия, возвращаемый как вектор-строка или массив ячеек, следующим образом:

  • Если str и expression являются векторами символов или строковыми скалярами, вывод представляет собой вектор-строку (или, если нет совпадений, пустой массив).

  • Если либо str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, выход - массив ячеек из векторов-строк. Выход массива ячеек имеет те же размерности что и вход массив.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

Сведения о соответствии, возвращенные в виде числа, камеры, строки или массива структур. Информация в выходе зависит от значения, которое вы задаете для outkey, следующим образом.

Ключевое слово выхода

Выход

Тип и размерности выхода

'start'

Стартовые индексы совпадений

Для обоих 'start' и 'end':

  • Если str и expression являются векторами символов или строковыми скалярами, вывод представляет собой вектор-строку (или, если нет совпадений, пустой массив).

  • Если либо str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, выход - массив ячеек из векторов-строк. Выход массива ячеек имеет те же размерности что и вход массив.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

'end'

Конечные индексы совпадений

'tokenExtents'

Стартовый и конечный индексы всех лексем

По умолчанию при возвращении всех матчей:

  • Если str и expression являются векторами символов или строковыми скалярами, выход 1-by- n массив ячеек, где n количество совпадений. Каждая камера содержит m-by-2 числовой массив индексов, где m количество лексем в соответствии.

  • Если либо str или expression является массивом ячеек из векторов символов или строковых массивов, выходом является массив ячеек с теми же размерностями, что и входной массив. Каждая камера содержит 1-байт- n массив ячеек, где каждая внутренняя камера содержит m-by-2 числовой массив.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

Когда вы задаете 'once' опция для возврата только одного соответствия, выход либо m-by-2 числовой массив или массив ячеек с такими же размерностями, как str и/или expression.

Если лексема ожидается с заданным индексом N, но не найден, MATLAB возвращает границы для этой лексемы [N,N-1].

'match'

Текст каждой подстроки, которая соответствует шаблону в expression

По умолчанию при возвращении всех матчей:

  • Если str и expression являются векторами символов или строковыми скалярами, выход 1-by- n массив, где n количество совпадений.

    Если str является вектор символов, тогда выход является массивом ячеек векторов символов. Если str является строковым скаляром, тогда выход является строковыми массивами.

  • Если либо str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, затем выводится массив ячеек с теми же размерностями, что и аргумент, являющийся массивом.

    Если str является вектором символов или массивом ячеек из векторов символов, затем выводится массив ячеек из векторов символов. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором каждая камера содержит строковые массивы.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

    Если str является массивом ячеек из векторов символов, тогда как и выход. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором каждая камера содержит строковые массивы.

Когда вы задаете 'once' опция для возврата только одного совпадения, выводится либо вектор символов, либо строковый массив, либо массив ячеек с такими же размерностями, как str и expression.

'tokens'

Текст каждого захваченной лексемы в str

По умолчанию при возвращении всех матчей:

  • Если str и expression являются векторами символов или строковыми скалярами, выход 1-by- n массив ячеек, где n количество совпадений. Каждая камера содержит 1-байт- m массив ячеек соответствует, где m количество лексем в соответствии.

    Если str является вектор символов, тогда выход является массивом ячеек векторов символов. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором каждая камера содержит строковые массивы.

  • Если либо str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, затем выводится массив ячеек с теми же размерностями, что и аргумент, являющийся массивом. Каждая камера содержит 1-байт- n массив ячеек, где каждая внутренняя камера содержит 1-байт- m массив.

    Если str является вектором символов или массивом ячеек с векторами символов, тогда каждая внутренняя камера содержит 1-байт- m массив ячеек. Если str являются строковые массивы, тогда каждая внутренняя камера содержит 1-байт- m строковые массивы.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

    Если str является массивом ячеек из векторов символов, тогда как и выход. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором самые внутренние камеры содержат строковые массивы.

Когда вы задаете 'once' опция, чтобы вернуть только один матч, выход 1-by- m строковые массивы, массив ячеек из векторов символов или массив ячеек с такими же размерностями, как и str и/или expression.

Если лексема ожидается с конкретным индексом, но не найден, MATLAB возвращает пустое значение для лексемы, '' для векторов символов или "" для строк.

'names'

Имя и текст каждого именованной лексемы

Для всех матчей:

  • Если str и expression являются векторами символов или строковыми скалярами, выход 1-by- n массив структур, где n количество совпадений. Имена полей структуры соответствуют именам лексем.

  • Если str или expression - массив ячеек из векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр. затем выводится массив ячеек с такими же размерностями, как и аргумент, являющийся массивом. Каждая камера содержит 1-байт- n массив структур.

  • Если str и expression являются массивами ячеек или строковыми массивами, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

'split'

Текст несоответствующих подстрок str

Для всех матчей:

  • Если str и expression являются векторами символов или строковыми скалярами, выход 1-by- n массив, где n - количество несовпадений.

    Если str является вектор символов, тогда выход является массивом ячеек векторов символов. Если str является строковым скаляром, тогда выход является строковыми массивами.

  • Если либо str или expression является массивом ячеек векторов символов или строковых массивов, а другой - вектор символов или строковый скаляр, тогда выход является массивом ячеек с такими же размерностями, как и массив входа. Каждая камера содержит 1-байт- n массив ячеек из векторов символов.

    Если str является вектором символов или массивом ячеек из векторов символов, затем выводится массив ячеек из векторов символов. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором каждая камера содержит строковые массивы.

  • Если str и expression являются обоими массивами ячеек, они должны иметь одинаковые размерности. Выходы - массив ячеек с одинаковыми размерностями.

    Если str является массивом ячеек из векторов символов, тогда как и выход. Если str являются строковые массивы, тогда выход является массивом ячеек, в котором каждая камера содержит строковые массивы.

Подробнее о

свернуть все

Лексемы

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

Для примера это выражение находит дату формы dd-mmm-yyyy, включая лексемы за день, месяц и год.

str = 'Here is a date: 01-Apr-2020';
expression = '(\d+)-(\w+)-(\d+)';

mydate = regexp(str,expression,'tokens');
mydate{:}
ans =

  1×3 cell array

    {'01'}    {'Apr'}    {'2020'}

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

str = 'Here is a date: 01-Apr-2020';
expression = '(?<day>\d+)-(?<month>\w+)-(?<year>\d+)';

mydate = regexp(str,expression,'names')
mydate = 

  struct with fields:

      day: '01'
    month: 'Apr'
     year: '2020'

Для получения дополнительной информации см. лексемы в регулярных выражениях».

Совет

  • Использовать contains или strfind чтобы найти точное совпадение символов в тексте. Использование regexp для поиска шаблона символов.

Алгоритмы

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

Когда MATLAB находит первое соответствие, он продолжает синтаксический анализ, чтобы соответствовать второй части выражения и так далее.

Представлено до R2006a