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 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.
Внимание: Для совместимости с MATLAB, функция strcmp в Octave возвращает 1, если строковые значения равны, и 0 в противном случае. Это прямо противоположно соответствующей функции из библиотеки C.
-
:
tf =strncmp(str1, str2, n)¶ -
Возвращает 1, если первые n символов строк str1 и str2 совпадают, и 0 в противном случае.
strncmp ("abce", "abcd", 3) ⇒ 1Если str1 или str2 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.
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 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.
Внимание: Для совместимости с MATLAB, функция strcmp в Octave возвращает 1, если строковые значения равны, и 0 в противном случае. Это прямо противоположно соответствующей функции из библиотеки C.
Внимание: Национальные алфавиты не поддерживаются.
-
:
tf =strncmpi(str1, str2, n)¶ -
Возвращает 1, если первые n символов s1 и s2 совпадают без учета регистра букв, и 0 в противном случае.
Если str1 или str2 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.
Внимание: Для совместимости с MATLAB, функция strncmpi в Octave возвращает 1, если строковые значения равны, и 0 в противном случае. Это прямо противоположно соответствующей функции из библиотеки C.
Внимание: Национальные алфавиты не поддерживаются.
Несмотря на эти функции сравнения, существуют более специализированные функции для нахождения индекса позиции шаблона поиска в строке.
-
:
retval =startsWith(str, pattern)¶ -
:
retval =startsWith(str, pattern, "IgnoreCase", ignore_case)¶ -
Проверяет, начинаются ли строки с заданного шаблона.
Возвращает массив логических значений, указывающих, какие строки во входном str (одиночная строка или массив ячеек строк) начинаются с входного pattern (одиночная строка или массив ячеек строк).
Если значение параметра
"IgnoreCase"истинно, то функция будет игнорировать регистр букв в 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"истинно, то функция будет игнорировать регистр букв в 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/v9.2.0/Searching-in-Strings.html