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 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.
Предупреждение: Для совместимости с MATLAB функция strcmp в Octave возвращает 1, если символьные строки совпадают, и 0 в противном случае. Это противоположно поведению соответствующей функции библиотеки C.
-
:
tf =strncmp(str1, str2, n) -
Возвращает 1, если первые n символов строк str1 и str2 совпадают, и 0 в противном случае.
strncmp ("abce", "abcd", 3) ⇒ 1Если str1 или str2 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.
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 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.
Предупреждение: Для совместимости с MATLAB функция strcmp в Octave возвращает 1, если символьные строки совпадают, и 0 в противном случае. Это противоположно поведению соответствующей функции библиотеки C.
Предупреждение: Национальные алфавиты не поддерживаются.
-
:
tf =strncmpi(str1, str2, n) -
Возвращает 1, если первые n символов s1 и s2 совпадают без учета регистра букв, и 0 в противном случае.
Если str1 или str2 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.
Предупреждение: Для совместимости с MATLAB функция strncmpi в Octave возвращает 1, если символьные строки совпадают, и 0 в противном случае. Это противоположно поведению соответствующей функции библиотеки C.
Предупреждение: Национальные алфавиты не поддерживаются.
Помимо этих функций сравнения, существуют более специализированные функции для поиска индекса вхождения шаблона поиска в строку.
-
:
retval =startsWith(str, pattern) -
:
retval =startsWith(str, pattern, "IgnoreCase", ignore_case) -
Проверяет, начинаются ли строки с заданных шаблонов.
Возвращает массив логических значений, указывающий, какие строки во входном аргументе str (отдельная строка или cell-массив строк) начинаются с входного аргумента pattern (отдельная строка или cell-массив строк).
Если значение параметра
"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 (отдельная строка или cell-массив строк) заканчиваются входным аргументом pattern (отдельная строка или cell-массив строк).
Если значение параметра
"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 также может быть строковым массивом или cell-массивом строк.
Например:
index ("Teststring", "t") ⇒ 4Если direction равен
"first", возвращается первый найденный элемент. Если direction равен"last", возвращается последний найденный элемент.
-
:
n =rindex(s, t) -
Возвращает позицию последнего вхождения символьной строки t в символьную строку s или 0, если вхождений не найдено.
s также может быть строковым массивом или cell-массивом строк.
Например:
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.Если задан cell-массив строк cellstr, то idx является cell-массивом векторов, как описано выше.
Необязательный аргумент
"forcecelloutput"принудительно возвращает idx в виде cell-массива векторов. Значение по умолчанию — 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 должен быть строкой, матрицей символов или cell-массивом строк.
Если третий аргумент
"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устарела (а при использовании с cell-массивами строк может давать неверные результаты в MATLAB). Во всем новом коде используйтеstrncmp(обычный вариант) илиstrcmp(вариант"exact"). В зависимости от задачи можно также использоватьregexpилиvalidatestring.См. также: strncmp, strcmp, regexp, strfind, validatestring.
© 1996–2026 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.4.0/Searching-in-Strings.html