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 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.

Внимание: Для совместимости с 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 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.

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 является массивом ячеек строк, то возвращается массив такой же размерности, содержащий значения, описанные выше, для каждого элемента массива ячеек. Другим аргументом также может быть массив ячеек строк (той же размерности или с одним элементом), матрица символов или строка символов.

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

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

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

: tf = strncmpi (str1, str2, n) ¶

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

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

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

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

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

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

: 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

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

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

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

: n = rindex (s, t) ¶

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

s также может быть строковым массивом или ячейным массивом строк.

Например:

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.

Если задан ячейный массив строк 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
        }

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

: 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

Spec-Zone.ru

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