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 wWSSD, или 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Текст

Алгоритмы

  • Точка (.) соответствия любой символ, кроме "\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 один из iMSX, локально примените модификаторы:

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

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

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

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

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

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

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

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

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

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

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

Функции MuPAD

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