# strindex

поиск положения символьной строки в другой строке

## Последовательность вызова

                ind = strindex(haystack, needle, [flag])
                [ind, which] = strindex(haystack, needle, [flag])

## Аргументы

haystack

  символьная строка. Строка, в которой ищутся совпадения с `needle`.

needle

  символьная строка или вектор символьных строк. Строка (строки) которая ищется в `haystack`.

ind

  вектор индексов.

which

  вектор индексов.

flag

  строка (`"r"` для регулярного выражения).

## Описание

Функция `strindex` ищет индексы, где найдена `needle(i)` в `haystack`.

Для каждого `k` существует такая `i`, что `part(haystack,ind(k)+(0:length(needle(i))-1))` является той же самой строкой, что и `needle(i)`. Если указан аргумент `which`, то он содержит эти `i`. Когда используется третий параметр `"r"`, то `needle` должна быть строкой регулярного выражения, и тогда `strindex` будет сравнивать её с `haystack` по правилам регулярного выражения.

`strindex` без аргумента регулярного выражения основывается на алгоритме Кнута-Морриса-Пратта [Knuth-Morris-Pratt].

Этот алгоритм более мощный, чем тот, который использовался в Scilab 4.x. В некоторых частных случаях результат может быть различным.

Пример:

// Scilab 5.x

-->[k,w]=strindex('aab',['a','ab'])

w = 1. 1. 2. k = 1. 2. 2.

// Scilab 4.x

-->[k,w]=strindex('aab',['a','ab'])

w = 1. 1. k = 1. 2.

Правила регулярного выражения сходны с языком Perl. Для быстрого старта см.http://perldoc.perl.org/perlrequick.html. Для более глубокого изучения см. http://perldoc.perl.org/perlretut.html, а для справки см. http://perldoc.perl.org/perlre.html.

## Примеры

    k=strindex('SCI/demos/scicos','/')
    k=strindex('SCI/demos/scicos','SCI/')
    k=strindex('SCI/demos/scicos','!')
    k=strindex('aaaaa','aa')
    k=strindex('SCI/demos/scicos',['SCI','sci'])
    [k,w]=strindex('1+3*abc/2.33',['+','-','*','/'])
    k=strindex('2' ,'/2(]*)?$\1/' ,'r')

## Смотрите также

- string
- strings
- regexp
- strsubst