exponenta event banner

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'}

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

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' соответствует запятой, определяемой шестнадцатеричным символом 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.

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

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

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

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

Описание

Пример

expr(?=test)

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

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

expr(?!test)

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

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

(?<=test)expr

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

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

(?<!test)expr

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

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

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

Операция

Описание

Пример

(?=test)expr

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

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

(?!test)expr

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

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

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

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

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

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

Описание

Пример

expr1|expr2

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

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

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

(?(cond)expr)

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

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

(?(cond)expr1|expr2)

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

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

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

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

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

Описание

Пример

(expr)

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

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

\N

Сопоставить NТый токен.

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

(?(N)expr1|expr2)

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

$<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'

Сопоставить точку с любым символом (по умолчанию) или все, кроме новой строки (\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-by-n массив ячеек, где n - количество совпадений. Каждая ячейка содержит m-по-2 числовой массив индексов, где m - количество маркеров в совпадении.

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

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

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

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

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

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

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

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

'names'

Имя и текст каждого именованного маркера

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

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

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

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

'split'

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

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

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

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

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