Spec-Zone.ru › Octave 9

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.

См. также: strcmpi, strncmp, strncmpi.

: 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.

См. также: strncmpi, strcmp, strcmpi.

: tf = strcmpi (str1, str2)

Возвращает 1, если символьные строки str1 и str2 совпадают без учета регистра букв, и 0 в противном случае.

Если str1 или str2 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.

Предупреждение: Для совместимости с MATLAB функция strcmp в Octave возвращает 1, если символьные строки совпадают, и 0 в противном случае. Это противоположно поведению соответствующей функции библиотеки C.

Предупреждение: Национальные алфавиты не поддерживаются.

См. также: strcmp, strncmp, strncmpi.

: tf = strncmpi (str1, str2, n)

Возвращает 1, если первые n символов s1 и s2 совпадают без учета регистра букв, и 0 в противном случае.

Если str1 или str2 является cell-массивом строк, возвращается массив того же размера, содержащий описанные выше значения для каждого элемента cell-массива. Другой аргумент также может быть cell-массивом строк (того же размера или состоящим из одного элемента), матрицей символов или символьной строкой.

Предупреждение: Для совместимости с MATLAB функция strncmpi в Octave возвращает 1, если символьные строки совпадают, и 0 в противном случае. Это противоположно поведению соответствующей функции библиотеки C.

Предупреждение: Национальные алфавиты не поддерживаются.

См. также: strncmp, strcmp, strcmpi.

Помимо этих функций сравнения, существуют более специализированные функции для поиска индекса вхождения шаблона поиска в строку.

: 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

См. также: endsWith, regexp, strncmp, strncmpi.

: 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", возвращается последний найденный элемент.

См. также: find, rindex.

: n = rindex (s, t)

Возвращает позицию последнего вхождения символьной строки t в символьную строку s или 0, если вхождений не найдено.

s также может быть строковым массивом или cell-массивом строк.

Например:

rindex ("Teststring", "t")
     ⇒ 6

Функция rindex эквивалентна index, если для direction задано значение "last".

См. также: find, index.

: 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
        }

См. также: regexp, regexpi, find.

: 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API