Поиск скаляров

Регулярные выражения — прекрасный способ поиска скаляров по шаблонам, но иногда это просто стрельба из пушки по воробьям. В Perl некоторые “накладные расходы” (впрочем, небольшие) связаны с трансляцией шаблона, а затем поиском этого шаблона среди скаляров. Кроме того, при написании регулярных выражений легко ошибиться. В Perl предусмотрено несколько функций поиска и извлечения простой информации из скаляров.


Функция index

Если вы просто хотите найти одну строку внутри другого скаляра, воспользуйтесь предусмотренной для этого в Peri функцией index. Ее синтаксис выглядит следующим образом:



Функция index начинает просмотр строки слева и ищет в ней подстроку. Функция index возвращает позицию, в которой найдена подстрока, причем значение 0 соответствует крайней левой позиции в строке. Если подстрока не найдена, то функция index возвращает значение -1. Искомая строка может состоять из букв, быть скаляром или любым выражением, возвращающим строковое значение. Подстрока — это не регулярное выражение, а просто другой скаляр.


Ниже приведено несколько примеров. Помните, что функции и операторы Perl можно записывать, заключая аргументы в круглые скобки или не делая этого.



Можно также (хотя это и необязательно) указать при вызове функции index начальную позицию в строке, с которой нужно начать поиск, как показано в следующем примере. Чтобы выполнить поиск с начала строки (с крайней левой позиции), используйте начальную позицию 0.



Можно также использовать функцию index с начальной позицией, чтобы “пройти” всю строку и найти все случаи вхождения в нее подстроки, как показано в следующем примере:



В результате выполнения данного примера будет выведено следующее:



Функция index из предыдущего примера выполняет в цикле сканирование строки $source, как показано ниже:



Поиск в обратном направлении с помощью функции rindex

Функция rindex работает точно так же, как index, за исключением того, что поиск начинается с крайнего правого символа строки и проводится в левую сторону. Синтаксис данной функции выглядит следующим образом.



Если поиск закончен,а подстрока не найдена, то функция rindex возвращает значение -1. Ниже приведено несколько примеров.



По сравнению с функцией index, код для реализации обратного поиска в цикле с помощью функции rindex выглядит несколько иначе. Причина заключается в том, что функция rindex начинает поиск с правого крайнего символа строки. Поэтому в качестве начальной позиции для поиска следует указать символ, расположенный за последним символом строки. Для этого вполне подойдет значение, возвращаемое функцией length ($source), как показано в следующем примере. Выполнение цикла следует завершить как только функция rindex возвратит значение -1. После нахождения каждого очередного элемента значение переменной $ start должно быть уменьшено на 1, а не увеличено, как в случае использования функции index.



Выделение части строки с помощью функции substr

О функции substr часто забывают, не придавая ей особого значения, хотя она предоставляет универсальный метод выборки информации из скаляров и их редактирования. Синтаксис этой функции выглядит следующим образом:



Функция substr берет строку, начиная с позиции, указанной во втором параметре, и возвращает оставшуюся часть строки (т.е. начиная с позиции смещение идо конца). Если параметр длина задан, то берется подстрока соответствующей длины. Если же в результате происходит выход за пределы строки, то просто берется подстрока до конца строки. Это продемонстрировано в следующем примере.



Если задано отрицательное значение параметра смещение, то функция substr начинает отсчет справа. Например, substr($a, -5) возвращает пять последних символов строки $а. Если задано отрицательное значение параметра длина, то функция substr возвращает подстроку от начальной позиции и до конца строки, за исключением последних символов, количество которых определяется параметром длина. Например:



В предыдущем фрагменте функция substr начала работу с 30-й позиции и вернула оставшуюся часть строки за исключением последних 4-х символов.


Функцию substr можно использовать также в левой части оператора присваивания. Такая конструкция позволяет указать, какие символы в скаляре должны быть заменены. В качестве первого аргумента функции substr следует задать скалярную переменную, а не строку символов, которой будет присваиваться значение. Ниже приведен пример редактирования строки с помощью функции substr,


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: