Поиск подстроки по индексу

Как найти подстроку? Зависит от того, где вы ее потеряли. Если подстрока затерялась в большей строке, считайте, вам повезло, потому что функция index поможет вам в поисках. Вот как это делается:

$where = index($big, $small);

Perl находит первое вхождение подстроки и возвращает целочисленный индекс первого символа. Нумерация индексов начинается с нуля – если подстрока находится в самом начале строки, функция index возвращает 0. Если подстрока смещена на один символ, функция возвращает 1, и т. д. Если найти подстроку не удалось, функция сообщает об этом, возвращая –1.1 В следующем примере $where возвращает 6:

my $stuff = "Howdy world!";
my $where = index($stuff, "wor");

При желании можно рассматривать возвращаемое значение index как количество символов, которые необходимо пропустить перед началом подстроки. Если переменная $where равна 6, значит, мы должны пропустить первые шесть символов $stuff, чтобы добраться до wor. Функция index всегда возвращает позицию первого вхождения подстроки. Однако ей можно приказать начать поиск не от начала строки, а с более поздней позиции – для этого функции передается необязательный третий параметр:

my $stuff = "Howdy world!";
my $where1 = index($stuff, "w"); # $where1 присваивается 2
my $where2 = index($stuff, "w", $where1 + 1); # $where2 присваивается 6
my $where3 = index($stuff, "w", $where2 + 1); # $where3 присваивается -1
# (подстрока не найдена)

(Конечно, обычно многократный поиск подстроки осуществляется в цикле.) Третий параметр фактически определяет минимальное возвращаемое значение; если найти подстроку в этой позиции и далее не удается, функция возвращает –1.


В некоторых ситуациях требуется найти не первое, а последнее вхождение подстроки.1 Эта задача решается функцией rindex. В следующем примере функция ищет последнее вхождение /, которое обнаруживается в позиции 4:

my $last_slash = rindex("/etc/passwd", "/"); # Значение равно 4

Функция rindex также имеет необязательный третий параметр, но в этом случае он определяет максимальное допустимое возвращаемое значение:

my $fred = "Yabba dabba doo!";
my $where1 = rindex($fred, "abba"); # $where1 gets 7
my $where2 = rindex($fred, "abba", $where1 - 1); # $where2 присваивается 1
my $where3 = rindex($fred, "abba", $where2 - 1); # $where3 присваивается -1

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Использование функции sprintf для вывода денежных сумм
Операции с подстроками и функция substr
Расширенная сортировка
Сортировка по нескольким ключам
Сортировка хеша по значениям

Вернуться в раздел: Perl / 13. Строки и сортировка