strmatch

Совпадайте с шаблоном в символьной строке

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

strmatch(text, pattern, <Index>, <ReturnMatches>, <All>)

Описание

strmatch(text, pattern) проверяет, совпадает ли text с регулярным выражением pattern.

strmatch выполняет регулярное выражение, соответствующее на строках через библиотеку ICU. Шаблон может содержать подстановочные знаки, формирующие совместимое с perl регулярное выражение. В этих выражениях большинство символов представляет себя. Например, "a" совпадает с "a". Для списка исключений см. Алгоритмы.

Библиотека stringlib обеспечивает больше функций для обработки строк. Для получения дополнительной информации смотрите Операции на Строках.

Примеры

Пример 1

Большинство символов просто совпадает с собой:

s := "Hamburg": strmatch(s, "Hamburg")

strmatch обычно совпадает с подстроками:

strmatch(s, "Ham"), strmatch(s, "burg")

strmatch("Ham", "Hamburg")

delete s:

Пример 2

Точка (.) является заполнителем для любого символа кроме "\n":

strmatch("abcd", "a.c"), strmatch("ab\ncd", "ab.")

Чтобы совпадать с фактической точкой, используйте "\\.":

strmatch("abcd", "a\\.c"),
strmatch("a.cd", "a\\.c")

Точка, как все специальные символы, имеет свою специальную роль только во втором аргументе strmatch:

strmatch("a.c", "abc")

С модификатором s можно использовать точку, чтобы совпадать с новыми строками:

strmatch("abcd", "(?s)a.c"), strmatch("ab\ncd", "(?s)ab.")

Точка совпадает с только отдельным символом:

strmatch("abcd", "a.d"), strmatch("abcd", "a.b")

Пример 3

По умолчанию strmatch только проверяет на соответствие и возвращает булево значение:

strmatch("aaaba", "a"), strmatch("aaaba", "c")

Чтобы возвратить первое место, где соответствие происходит, используйте Index:

strmatch("aaaba", "a", Index), 
strmatch("aaaba", "c", Index)

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

strmatch("aaaba", "a", ReturnMatches), 
strmatch("aaaba", "c", ReturnMatches)

Чтобы найти больше чем одно соответствие, используйте All:

strmatch("aaaba", "a", All), 
strmatch("aaaba", "c", All)

Это выражение имеет несколько соответствий, потому что точка совпадает с любым символом:

strmatch("aaaba", "a.", All)

All подразумевает ReturnMatches, если вы также не используете Index:

strmatch("aaaba", "a", All, Index)

Объедините все три опции:

strmatch("aaaba", "a", All, Index, ReturnMatches)

Пример 4

По умолчанию strmatch совпадает с подстроками. Чтобы только искать соответствия вначале и конец строки, используйте каре (^) и доллар ($) символы, соответственно:

strmatch("abcd", "a"),
strmatch("abcd", "c"),
strmatch("abcd", "d"),
strmatch("abcd", "abcd")

strmatch("abcd", "^a"),
strmatch("abcd", "^c"),
strmatch("abcd", "^d"),
strmatch("abcd", "^abcd")

strmatch("abcd", "a$"),
strmatch("abcd", "c$"),
strmatch("abcd", "d$"),
strmatch("abcd", "abcd$")

strmatch("abcd", "^a$"),
strmatch("abcd", "^c$"),
strmatch("abcd", "^d$"),
strmatch("abcd", "^abcd$")

Используя модификатор m, можно изменить значение с начала или конца строки к началу или конца строки:

s := "ab\ncd":
strmatch(s, "b$"),
strmatch(s, "(?m)b$")

Пример 5

Задайте альтернативные шаблоны, чтобы соответствовать при помощи вертикальной панели (|):

strmatch("abcd", "abc|xyz")

strmatch("abcd", "a|f|j")

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

strmatch("abcd", "ab(c|xy)z"),
strmatch("abcd", "ab(c|xy)(z|d)")

Когда вы используете опцию ReturnMatches, strmatch возвращает подстроки, соответствующие каждой парой круглых скобок:

strmatch("abcd", "ab(c|xy)(z|d)", ReturnMatches)

С альтернативами strmatch может найти несколько соответствий:

strmatch("abracadabra", "a(b|c|d)", All)

К альтернативам группы, не возвращая соответствия, используйте (?:...):

strmatch("abracadabra", "a(?:b|c|d)", All)

Чтобы соответствовать для символов "| ", "(", и")", используют \\ перед символом, когда вы задаете шаблон, чтобы соответствовать:

strmatch("ab(c)d", "\\((c|d)\\)", ReturnMatches)

Пример 6

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

strmatch("abcd", "abc?d"),
strmatch("abd", "abc?d")

Используйте звездочку (*), чтобы указать, что подвыражение может быть повторено произвольное число времен, включая нуль:

strmatch("abcd", "a.*d"),
strmatch("abcd", "a.*c")

Используйте знак "плюс" (+), чтобы указать, что подвыражение может быть повторено произвольное число времен, исключая нуль:

strmatch("abcd", "a.+d"),
strmatch("abcd", "a.+b")

Когда вы используете звездочку или знак "плюс" в шаблоне, чтобы соответствовать, strmatch находит первое соответствие, идущее слева направо, и затем возвращает самую длинную подстроку, которая удовлетворяет соответствующий шаблон:

strmatch("abracadabra", "a.*a", ReturnMatches)

Путем добавления другого вопросительного знака можно переключить звездочку и знак "плюс" к “нежадному” соответствию:

strmatch("abracadabra", "a.*?a", ReturnMatches)

Это не возвращает самое короткое соответствие (который был бы "aca" или "ada"). Вызов возвращает первое соответствие, смотрящее слева направо от стартовой позиции.

Пример 7

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

strmatch("abracadabra", "(a(b|c|d)){2}"),
strmatch("abracadabra", "(a(b|c|d)){3}"),
strmatch("abracadabra", "(a(b|c|d)){4}")

Эти повторения должны быть смежными:

strmatch("abracadabra", "(abr){2}")

Чтобы получить несмежные повторения, используйте ".*". Эта комбинация означает "что-либо без новых строк".

strmatch("abracadabra", "(abr.*){2}")

Пример 8

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

select(["11001", "1100111", "11", "11021"], strmatch, "^((0|1){3,5})$")

Здесь {3,5} задает область значений. Можно не использовать второй номер, чтобы удалить верхнюю границу. Например, {3,} указывает, что должно быть три или больше повторения.

Следующее регулярное выражение проверяет, существует ли "a", сопровождаемый по крайней мере тремя буквами "b", сопровождаемый "c" где-нибудь во входной строке:

strmatch("abcd", "ab{3,}c"),
strmatch("abbbcd", "ab{3,}c"),
strmatch("abcdabbbc", "ab{3,}c")

По умолчанию, когда strmatch ищет повторения, он возвращает самую длинную подстроку соответствия. Используйте вопросительный знак, чтобы возвратить первое соответствие вместо самого длинного:

strmatch("abcdabcdabcd", "a.{2,8}d", ReturnMatches),
strmatch("abcdabcdabcd", "a.{2,8}?d", ReturnMatches)

Пример 9

Символы заключили в скобках ([ ]) форма "класс символов", который совпадает с любым из символов в классе. Это поведение подобно чередованию между этими символами.

strmatch("abc", "ab[cde]"),
strmatch("abd", "ab[cde]"),
strmatch("aba", "ab[cde]")

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

strmatch("abcd", "[^ab]", All)

Если каре не является первым символом в классе, то это представляет себя:

strmatch("x^2", "[*^]2")

Если тире (-) не является первым символом в классе (кроме каре), то это задает область значений символов. Таким образом, чтобы найти номер по крайней мере с пятью цифрами, можно задать шаблон можно следующим образом:

strmatch("x = 123456...", "[0-9]{5,}", ReturnMatches)

Точное значение области значений зависит от настроек языка вашего компьютера. Технически, это зависит от "сопоставления", которое может отличаться для того же языка на различных версиях той же операционной системы. Например, "[a-z]" может совпадать только со строчными символами ASCII на одном компьютере, в то время как на втором это также совпадает с символами верхнего регистра от до Y, и на третьем включает символы верхнего регистра от B до Z. Поэтому лучшая практика использует именованные классы символов вместо этого:

strmatch("some words", "[[:word:]]+", All)

Пример 10

Некоторые классы символов имеют краткую форму, такую как "\\x", где x является w, W, s, S, d или D. Прописные буквы означают отрицание строчных букв.

strmatch("abcd", "\\w"),
strmatch("abcd", "\\W"),
strmatch("abcd", "\\d"),
strmatch("abcd", "\\D")

Здесь, отрицание означает, что символ не совпадает с тем, что отрицается:

strmatch("abcd 1", "\\w"),
strmatch("abcd 1", "\\W"),
strmatch("abcd 1", "\\d"),
strmatch("abcd 1", "\\D")

Используйте "\\b", чтобы искать слова начиная с a. Шаблон "\\b" является выражением нулевой ширины, совпадающим с местом между "словом" и пробелами, окружающими его (или начало и конец строки).

strmatch("abc cbd cba (aa) b", "\\ba\\w*", All)

Можно также использовать "\\b", чтобы совпадать с концом слова:

strmatch("abc cbd cba (aa) b", "\\w*a\\b", All)

Пример 11

Можно изменить поведение strmatch с флагами модификатора. Например, модификатор i включает нечувствительное к регистру соответствие. (Точные эффекты нечувствительного к регистру соответствия зависят от ваших настроек языка, например, большинство английских компьютеров не обрабатывает немецкие умляуты ä и Ä, как являющийся тем же самым до случая.), Чтобы включить нечувствительное к регистру соответствие для целого выражения, снабдите префиксом его "(?i)":

strmatch("ABC", "(?i)ab")

Чтобы ограничить эффект модификатора к некоторой части выражения, используйте "(?i:...)":

strmatch("ABC", "(?i:a)b"),
strmatch("abc", "(?i:a)b"),
strmatch("Abc", "(?i:a)b")

Пример 12

strmatch с ReturnMatches или All (без Index) возвращает совпадающие подстроки. Можно также возвратить части тех подстрок. Например, извлеките все имена функций от этого выражения. Чтобы идентифицировать имена функций, обратите внимание, что вводная круглая скобка или пробел и вводная круглая скобка следуют за каждым именем функции.

s := "f(sin (x) + abc + def(x))":
strmatch(s, "\\b\\w+\\s*\\(", All)

Чтобы извлечь сами имена функций, используйте эту команду:

map(strmatch(s, "\\b(\\w+)\\s*\\(", All), op, 2)

Регулярные выражения могут содержать утверждения нулевой ширины. Эти утверждения гарантируют, что что-то делает или не следует, без на самом деле включая его или перемещение концептуального указателя позади него. Поэтому более эффективный подход должен перенести соответствующее выражение в "(?=...)":

strmatch(s, "\\b\\w+(?=\\s*\\()", All)

Пример 13

Регулярные выражения могут также сделать утверждения нулевой ширины относительно предыдущего текста. Такие утверждения должны иметь фиксированную ширину. Например, извлеките сумму денег, упомянутую в этой строке:

s := "In March 2005, we've spent $1192.23 on light.":
strmatch(s, "(?<=\\$)\\d+(?:\\.\\d\\d)?", All)

Пример 14

Чтобы обнаружить положения соответствий во входной строке, используйте опцию Index. Возвращенный список содержит два числа: начало и конец соответствия.

strmatch("abc", "b", Index)

Если никакое соответствие не найдено, strmatch возвращает FALSE:

strmatch("abc", "d", Index)

Если вы используете и Index и ReturnMatches, то strmatch возвращает индексы, сопровождаемые совпадающими подвыражениями:

strmatch("abc", "b.", ReturnMatches, Index)

Пример 15

Если вы используете All, то возвращаемое значение является набором:

strmatch("abc", ".", All),
strmatch("abc", ".", Index, All),
strmatch("abc", ".", ReturnMatches, All)

Параметры

text, pattern

символьные строки

Опции

Index

Возвратите положение соответствия. Если нет никаких соответствий, strmatch возвращает FALSE. В противном случае это возвращает положение соответствия как список двух целых чисел, [i, j], такого, что text[i..j] является совпадающей подстрокой.

ReturnMatches

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

All

Возвратите все соответствия, которые может найти strprint. По умолчанию strmatch возвращает только первое соответствие. Если вы не используете Index, то опция All также подразумевает ReturnMatches.

Возвращаемые значения

Без опций, TRUE или FALSE возвращен. С Index, списком двух неотрицательных целых чисел или FALSE возвращен. С опцией ReturnMatches, строка или список строк возвращены, в зависимости от того, содержит ли шаблон группы. И с Index и с ReturnMatches, возвращен список начиная с индексов соответствия, сопровождаемого строкой или строками ReturnMatches. С опцией All возвращен набор.

Перегруженный

pattern, text

Алгоритмы

  • Точка (.) совпадает с любым символом, кроме "\n". С модификатором s точка совпадает с любым символом. Смотрите Пример 2.

  • Каре (^) совпадает с началом строки. Доллар ($) совпадает с концом строки. Как правило, ^ и $ отмечают начало и конец строки, но с модификатором m они также могут появиться после или перед "\n". Смотрите Пример 4.

  • Шаблон, заключенный в круглые скобки в круглых скобках (()), рассматривается “сгруппированным”.

  • Вертикальная панель (|) между двумя символами или группами (sub-regexes) позволяет вам задать альтернативные шаблоны соответствия. Любая из альтернатив, соответствующих, достаточна. Смотрите Пример 5.

  • sub-regex, сопровождаемый номером n, заключенный в {}, должен совпадать точно с временами n.

    sub-regex, сопровождаемый {n,}, должен совпадать, по крайней мере, с временами n.

    sub-regex, сопровождаемый {n,m}, должен совпадать, по крайней мере, с n и в большинство раз m.

    В любом другом контексте { и } обработаны как обычные символы.

    Смотрите пример 7.

  • После sub-regex вопросительный знак (?) работает {0,1}, делая sub-regex дополнительное.

    Знак "плюс" (+) в этом контексте работает {1,} и позволяет произвольное положительное число повторений.

    Звездочка после выражения эквивалентна {0,} и позволяет произвольное число повторений, включая нуль.

    Смотрите пример 6.

  • По умолчанию {n,} и его три сокращения формируют соответствие как можно больше символов. Следующим их с другим вопросительным знаком (например, "a(b[cd]){2,}?bd", "(0|1)*?12"), можно указать, что strmatch должен возвратить самое низкое количество символов, сопоставимых с остатком от шаблона.

  • В то время как наклонная черта влево (который должен быть введен как "\\") выходит из любого специального символа (включая себя), это делает некоторые символы после него особенными. Смотрите Пример 10.

    • "\\w" совпадает с символом “слова” (алфавитно-цифровой или подчеркивание).

    • "\\W" совпадает с символом, не соответствующим "\\w".

    • "\\s" совпадает с пробельным символом (пробел или табулятор, или, если модификатор s активен, также символ конца строки).

    • "\\S" совпадает с символом, не соответствующим "\\s".

    • "\\d" совпадает с цифрой.

    • "\\D" совпадает с нецифрой.

    • "\\b" совпадает с местом между словесным символом и несловесным символом, например, место, где слово запускается или заканчивается.

    • "\\B" является также нулевой шириной, но совпадает с теми местами, где "\\b" не делает.

    • "\\A" и "\\Z" соответствуют вначале и конец строки, соответственно. "\\Z" игнорирует "\n" в конце строки; "\\z" ведет себя как "\\Z", но не игнорирует запаздывающий "\n".

    • '\\X' совпадает с кластером графемы. Например, буква является кластером графемы: это состоит из a и ̄. '\\X' позволяет вам доступ как одна сущность.

  • Символы, заключенные между [ и ], формируют класс символов. Смотрите Пример 9.

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

    В классе символов специальные символы, за исключением дефиса, не имеют никакого особого значения. Если дефис (-) не является первым символом, то это создает область значений символов. Настройки языка вашей операционной системы (с технической точки зрения, текущая локаль) влияют, как strmatch интерпретирует эту область значений. Вероятно, в каждой установке "[0-9]" языка представляет любую цифру.

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

    • "[[:digit:]]" для любой цифры.

    • "[[:alpha:]]" для символов (настройки языка задают то, что делает символ).

    • "[[:alnum:]]" для алфавитно-цифровых символов.

    • "[[:word:]]" для алфавитно-цифровых символов плюс подчеркивание (_).

    • "[[:punct:]]" для символов пунктуации, таких как точка или запятая.

    • "[[:ascii:]]" для символов в области значений ASCII (десятичные коды 32 - 127).

    • "[[:blank:]]" для горизонтальных пространств, такого as[ \t].

    • "[[:space:]]" для пробелов, включая конец строки.

    • "[[:cntrl:]]" для управляющих символов, таких как новые строки. Обратите внимание на то, что вы не можете ввести большинство управляющих символов в MuPAD®, но они могут произойти в строках, считанных из файлов.

    • "[[:graph:]]" для класса алфавитно-цифровых символов или символов пунктуации, то есть, символов с визуальным графическим представлением.

    • "[[:print:]]" эквивалентен "[ [:graph:]]". Это добавляет пробел в класс graph.

    • "[[:lower:]]" и "[[:upper:]]" для символов, что ваши настройки языка рассматривают строчные и прописные буквы. Например, немецкая система, более вероятно, будет знать о ä быть строчной буквой, чем американская система.

    • "[[:xdigit:]]" совпадает с шестнадцатеричными цифрами. Это эквивалентно [0123456789aAbBcCdDeEfF].

    Вы комбинируете эти классы друг с другом или добавляете символы от одного класса до другого класса. Например, можно совпадать с семнадцатеричными цифрами "[[:xdigit:]gG]".

    Можно инвертировать posix классы символов с помощью каре. Например, "[[:^digit:]]" совпадает с нецифрами. Это эквивалентно "[^[:digit:]]", но "[0[:^digit:]]", чтобы позволить любую нецифру или нуль более трудно выразить в противном случае.

  • У групп начиная с (? есть особые значения:

    • Группы начиная с (?: ведут себя как другие группы, но не создают выходные соответствия для опции ReturnMatches.

    • "(?#text)" является комментарием и эффективно проигнорированный.

    • Группы начиная с (?X:, где X является одним из i, m, s, x, локально применяют модификаторы:

      • i заставляет все сопоставление с образцом быть нечувствительным к регистру (как задано локалью системы).

      • m вызывает “многострочное” соответствие, где ^ и соответствие $ после/прежде чем символов "\n" в строке.

      • s делает точечные новые строки соответствия.

      • x позволяет комментарии стиля perl в шаблоне. В этом случае strmatch игнорирует пробелы в большинстве контекстов. # символы запускают комментарии, которые расширяют в конец строки.

      При использовании этих опций во внешней группе можно ли отключить их путем предшествования им со знаком "минус", как в" (?-i:aB)".

    • Строка "(?X)", где X является одним из упомянутых выше символов, включает соответствующую установку в конец группы включения.

    • (?= запускает положительное утверждение предвидения нулевой ширины. Это - элемент нулевой ширины (и поэтому не добавляет что-то в вывод), который соответствует, если его содержимое соответствует в текущем положении. Смотрите Пример 12.

    • (?! запускает нулевую ширину отрицательное предварительное утверждение. Это ведет себя почти идентичное (?= кроме него соответствия, если и только если (?= не делает.

    • (?<= запускается, положительная нулевая ширина оглядываются утверждение, которое похоже на (?=, но смотрящий в другом направлении. Оглянитесь утверждения должны иметь фиксированную ширину. Смотрите Пример 13.

    • (?<! запускается, отрицательная нулевая ширина оглядываются утверждение, которое соответствует, если и только если (?<= в том же месте не соответствует.

Смотрите также

Функции MuPAD