5.3.4 Поиск в строках
Поскольку строка является массивом символов, сравнения строк выполняются по элементу, как показано в следующем примере:
GNU = "GNU's Not UNIX";
spaces = (GNU == " ")
⇒ spaces =
0 0 0 0 0 1 0 0 0 1 0 0 0 0 Для определения тождественности двух строк необходимо использовать функцию strcmp. Она сравнивает целые строки и чувствительна к регистру. strncmp сравнивает только первые N символы (с N в качестве параметра). strcmpi и strncmpi — соответствующие функции для сравнения без учёта регистра.
- : tf = strcmp (str1, str2) ¶
-
Возвращает 1, если символьные строки str1 и str2 совпадают, и 0 в противном случае.
Если либо str1, либо str2 является массивом ячеек строк, то возвращается массив той же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другой аргумент также может быть массивом ячеек строк (той же размерности или с одним элементом), матрицей char или строкой.
Внимание: Для совместимости с MATLAB, функция strcmp в Octave возвращает 1, если символьные строки равны, и 0 в противном случае. Это просто противоположность соответствующей функции библиотеки C.
- : tf = strncmp (str1, str2, n) ¶
-
Возвращает 1, если первые n символов строк str1 и str2 совпадают, и 0 в противном случае.
strncmp ("abce", "abcd", 3) ⇒ 1Если либо str1, либо str2 является массивом ячеек строк, то возвращается массив той же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другой аргумент также может быть массивом ячеек строк (той же размерности или с одним элементом), матрицей char или строкой.
strncmp ("abce", {"abcd", "bca", "abc"}, 3) ⇒ [1, 0, 1]Внимание: Для совместимости с MATLAB, функция strncmp в Octave возвращает 1, если символьные строки равны, и 0 в противном случае. Это просто противоположность соответствующей функции библиотеки C.
- : tf = strcmpi (str1, str2) ¶
-
Возвращает 1, если символьные строки str1 и str2 совпадают, не учитывая регистр букв, и 0 в противном случае.
Если либо str1, либо str2 является массивом ячеек строк, то возвращается массив той же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другой аргумент также может быть массивом ячеек строк (той же размерности или с одним элементом), матрицей char или строкой.
Внимание: Для совместимости с MATLAB, функция strcmp в Octave возвращает 1, если символьные строки равны, и 0 в противном случае. Это просто противоположность соответствующей функции библиотеки C.
Внимание: Национальные алфавиты не поддерживаются.
- : tf = strncmpi (str1, str2, n) ¶
-
Возвращает 1, если первые n символов s1 и s2 совпадают, не учитывая регистр букв, и 0 в противном случае.
Если либо str1, либо str2 является массивом ячеек строк, то возвращается массив той же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другой аргумент также может быть массивом ячеек строк (той же размерности или с одним элементом), матрицей char или строкой.
Внимание: Для совместимости с MATLAB, функция strncmpi в Octave возвращает 1, если символьные строки равны, и 0 в противном случае. Это просто противоположность соответствующей функции библиотеки C.
Внимание: Национальные алфавиты не поддерживаются.
Несмотря на эти функции сравнения, существуют более специализированные функции для поиска индекса позиции шаблона поиска в строке.
- : retval = startsWith (str, pattern) ¶
- : retval = startsWith (str, pattern, "IgnoreCase", ignore_case) ¶
-
Проверяет, начинаются ли строки с шаблона(ов).
Возвращает массив логических значений, указывающий, какие строки в вводе str (одиночная строка или массив ячеек строк) начинаются с ввода pattern (одиночная строка или массив ячеек строк).
Если значение параметра
"IgnoreCase"равно true, то функция будет игнорировать регистр букв в str и pattern. По умолчанию сравнение чувствительно к регистру.Примеры:
## one string and one pattern while considering case startsWith ("hello", "he") ⇒ 1 ## one string and one pattern while ignoring case startsWith ("hello", "HE", "IgnoreCase", true) ⇒ 1 ## multiple strings and multiple patterns while considering case startsWith ({"lab work.pptx", "data.txt", "foundations.ppt"}, {"lab", "data"}) ⇒ 1 1 0 ## multiple strings and one pattern while considering case startsWith ({"DATASHEET.ods", "data.txt", "foundations.ppt"}, "data", "IgnoreCase", false) ⇒ 0 1 0 ## multiple strings and one pattern while ignoring case startsWith ({"DATASHEET.ods", "data.txt", "foundations.ppt"}, "data", "IgnoreCase", true) ⇒ 1 1 0
- : retval = endsWith (str, pattern) ¶
- : retval = endsWith (str, pattern, "IgnoreCase", ignore_case) ¶
-
Проверяет, заканчиваются ли строки шаблоном(ами).
Возвращает массив логических значений, указывающий, какие строки в вводе str (одиночная строка или массив ячеек строк) заканчиваются вводом pattern (одиночная строка или массив ячеек строк).
Если значение параметра
"IgnoreCase"равно true, то функция будет игнорировать регистр букв в str и pattern. По умолчанию сравнение чувствительно к регистру.Примеры:
## one string and one pattern while considering case endsWith ("hello", "lo") ⇒ 1 ## one string and one pattern while ignoring case endsWith ("hello", "LO", "IgnoreCase", true) ⇒ 1 ## multiple strings and multiple patterns while considering case endsWith ({"tests.txt", "mydoc.odt", "myFunc.m", "results.pptx"}, {".docx", ".odt", ".txt"}) ⇒ 1 1 0 0 ## multiple strings and one pattern while considering case endsWith ({"TESTS.TXT", "mydoc.odt", "result.txt", "myFunc.m"}, ".txt", "IgnoreCase", false) ⇒ 0 0 1 0 ## multiple strings and one pattern while ignoring case endsWith ({"TESTS.TXT", "mydoc.odt", "result.txt", "myFunc.m"}, ".txt", "IgnoreCase", true) ⇒ 1 0 1 0См. также: startsWith, regexp, strncmp, strncmpi.
- : v = findstr (s, t) ¶
- : v = findstr (s, t, overlap) ¶
-
Эта функция устарела. Используйте
strfindвместо неё.Возвращает вектор всех позиций в большей из двух строк s и t, где встречается меньшая из двух.
Если необязательный аргумент overlap равен true (по умолчанию), возвращаемый вектор может включать перекрывающиеся позиции. Например:
findstr ("ababab", "a") ⇒ [1, 3, 5]; findstr ("abababa", "aba", 0) ⇒ [1, 5]Внимание:
findstrустарела. Используйтеstrfindво всём новом коде.См. также: strfind, strmatch, strcmp, strncmp, strcmpi, strncmpi, find.
- : idx = strchr (str, chars) ¶
- : idx = strchr (str, chars, n) ¶
- : idx = strchr (str, chars, n, direction) ¶
- : [i, j] = strchr (…) ¶
-
Поиск в строке str вхождений символов из набора chars.
Возвращаемое значение(я), а также аргументы n и direction ведут себя так же, как в
find.Это будет быстрее, чем использование
regexpв большинстве случаев.См. также: find.
- : n = index (s, t) ¶
- : n = index (s, t, direction) ¶
-
Возвращает позицию первого вхождения строки t в строке s или 0, если вхождение не найдено.
s также может быть строковым массивом или массивом ячеек строк.
Например:
index ("Teststring", "t") ⇒ 4Если direction является
"first", возвращает первый найденный элемент. Если direction является"last", возвращает последний найденный элемент.
- : n = rindex (s, t) ¶
-
Возвращает позицию последнего вхождения строковой переменной t в строковой переменной s, или 0, если совпадения не найдено.
s также может быть строковым массивом или ячейным массивом строк.
Например:
rindex ("Teststring", "t") ⇒ 6Функция
rindexэквивалентнаindexс параметром direction, установленным в"last".
- : idx = unicode_idx (str) ¶
-
Возвращает массив с индексами каждого символа UTF-8 в str.
unicode_idx ("aäbc") ⇒ [1, 2, 2, 3, 4]
- : idx = strfind (str, pattern) ¶
- : idx = strfind (cellstr, pattern) ¶
- : idx = strfind (…, "overlaps", val) ¶
- : idx = strfind (…, "forcecelloutput", val) ¶
-
Ищет pattern в строке str и возвращает начальный индекс каждого такого вхождения в векторе idx.
Если совпадения нет, или pattern длиннее str, или pattern пусто, то idx — пустой массив
[].Необязательный аргумент
"overlaps"определяет, может ли шаблон совпадать в каждой позиции в str (true), или только для уникальных вхождений всего шаблона (false). По умолчанию — true.Если указан ячейный массив строк cellstr, то idx — ячейный массив векторов, как указано выше.
Необязательный аргумент
"forcecelloutput"принудительно возвращает idx в виде ячейного массива векторов. По умолчанию — false.Примеры:
strfind ("abababa", "aba") ⇒ [1, 3, 5] strfind ("abababa", "aba", "overlaps", false) ⇒ [1, 5] strfind ({"abababa", "bebebe", "ab"}, "aba") ⇒ { [1,1] = 1 3 5 [1,2] = [](1x0) [1,3] = [](1x0) } strfind ("abababa", "aba", "forcecelloutput", true) ⇒ { [1,1] = 1 3 5 }
- : idx = strmatch (s, A) ¶
- : idx = strmatch (s, A, "exact") ¶
-
Эта функция устарела. Используйте альтернативу, например
strncmpилиstrcmpвместо неё.Возвращает индексы элементов A, начинающихся со строки s.
Второй аргумент A должен быть строкой, матрицей символов или ячейным массивом строк.
Если третий аргумент
"exact"не указан, то s должен совпадать с A до длины s. Конечные пробелы и нули в s и A игнорируются при поиске совпадений.Например:
strmatch ("apple", "apple juice") ⇒ 1 strmatch ("apple", ["apple "; "apple juice"; "an apple"]) ⇒ [1; 2] strmatch ("apple", ["apple "; "apple juice"; "an apple"], "exact") ⇒ [1]Внимание:
strmatchустарела (и может давать некорректные результаты в MATLAB при использовании с ячейными массивами строк. Используйтеstrncmp(обычный случай) илиstrcmp(случай"exact") во всем новом коде. Другие возможные замены в зависимости от приложения включаютregexpилиvalidatestring.См. также: strncmp, strcmp, regexp, strfind, validatestring.
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Searching-in-Strings.html