regexp

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

Синтаксис

startIndex = regexp(str,expression)
[startIndex,endIndex] = regexp(str,expression)
out = regexp(str,expression,outkey)
[out1,...,outN] = regexp(str,expression,outkey1,...,outkeyN)
___ = regexp(___,option1,...,optionM)
___ = regexp(___,'forceCellOutput')

Описание

пример

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 array
    {'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 array
    {'Split '}    {'this text into '}    {'several pieces'}

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

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

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

noMatch = 1x4 cell array
    {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.

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

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

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

matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1x2 cell array
    {'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 array
    {'abc'}    {' de'}

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

expression = '.$';
lastInLine = regexp(str,expression,'match','lineanchors')
lastInLine = 1x2 cell array
    {'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
    {1x2 double}

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

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 array
    {'cat'}    {'coat'}

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

noMatch{1}
ans = 1x3 cell array
    {'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'.

[c 1-c2]

Любой символ в области значений c 1 через c 2

'[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*

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

'\w*' распознает слово любой длины.

expr?

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

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

expr+

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

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

expr{m,n}

По крайней мере, времена m, но не больше, чем времена n последовательно.

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

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

expr{m,}

По крайней мере, времена m последовательно.

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

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

expr{n}

Точно времена n последовательно.

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

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

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

Режим

Описание

Пример

expr q

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

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

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

expr q?

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

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

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

expr q +

Притяжательное выражение: соответствуйте как можно больше, но не повторно сканируйте фрагменты текста.

Учитывая text'<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, не получены или отброшены. Поэтому предварительные утверждения могут совпадать с перекрывающимися группами символов.

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

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

Операция

Описание

Пример

(?=test)expr

Совпадайте и с test и с expr.

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

(?!test)expr

Совпадайте с expr и не совпадайте с test.

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

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

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

Условия могут быть лексемами, lookaround операторы или динамические выражения формы (?@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

Совпадайте с N th лексема.

'<(\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 должен соответствовать полному, действительному регулярному выражению. Динамические выражения, которые используют символ ESC наклонной черты влево (\), требуют двух наклонных черт влево: один для начального парсинга 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

N th лексема

$<name>

Названная лексема

${cmd}

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

Комментарии

'characters'

Описание

Пример

(?#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'

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

'stringanchors'

'lineanchors'

Примените ^ и метасимволы $ к началу и концу вектора символов (значение по умолчанию), или к началу и концу строки. Символ новой строки (\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 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 n массивом, где n является количеством соответствий.

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

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

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

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

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

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

'tokens'

Текст каждой полученной лексемы в str

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

  • Если str и expression являются оба векторами символов или представляют скаляры в виде строки, вывод является 1 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 m массивом строк, массивом ячеек из символьных векторов или массивом ячеек, который имеет те же размерности как str и/или expression.

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

'names'

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

Для всех соответствий:

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

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

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

'split'

Текст несоответствия с подстроками str

Для всех соответствий:

  • Если str и expression являются оба векторами символов или представляют скаляры в виде строки, вывод является 1 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 = 
    '01'    'April'    '2020'

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

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

mydate = regexp(str,expression,'names')
mydate = 
      day: '01'
    month: 'Apr'
     year: '2020'

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

Советы

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

Алгоритмы

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

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

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

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