strrpos (исходная строка, символ для поиска)
В отличие от strpos() эта функция позволяет найти позицию последнего появления в строке указанного символа. Нельзя искать позицию строки, только символа.
Бывают ситуации, когда знать позицию, где находится искомая строка, необязательно, а нужно просто получить все символы, которые расположены после вхождения этой строки. Можно, конечно, воспользоваться и приведенными выше функциями strpos() и strrpos(), но можно сделать и проще – выделить подстроку с помощью предназначенных именно для этого функций.
Выделение подстроки
Функция strstr
Говоря о выделении подстроки из искомой строки в языке PHP, в первую очередь стоит отметить функцию strstr():
strstr (исходная строка, строка для поиска)
Она находит первое появление искомой строки и возвращает подстроку, начиная с этой искомой строки до конца исходной строки.
Если строка для поиска не найдена, то функция вернет false. Если строка для поиска не принадлежит строковому типу данных, то она переводится в целое число и рассматривается как код символа. Кроме того, эта функция чувствительна к регистру, т.е. если мы будем параллельно искать вхождения слов «Идея» и «идея», то результаты будут разными. Вместо strstr() можно использовать абсолютно идентичную ей функцию strchr().
Пример 8.4. Выделим из строки, содержащей название и автора исследования, подстроку, начинающуюся со слова «Название»:
<?
$str = "Автор: Иванов Иван (<a
href=mailto:van@mail.ru>написать письмо</a>),
Название: 'Исследование языков
программирования' ";
echo "<b>Исходная строка: </b>",$str;
if (!strstr($str, "Название"))
echo "Строка не найдена<br>";
else echo "<p><b>Полученная подстрока: </b>",
strstr($str, "Название");
?>
В результате получим:
Исходная строка: Автор: Иванов Иван
(написать письмо),
Название: 'Исследование языков
программирования'
Полученная подстрока: Название:
'Исследование языков программирования'
Для реализации регистронезависимого поиска подстроки существует соответствующий аналог этой функции – функция stristr (исходная строка, искомая строка). Действует и используется она точно так же, как и strstr(), за исключением того, что регистр, в котором записаны символы искомой строки, не играет роли при поиске.
Очевидно, что функция strstr() не слишком часто используется – на практике редко бывает нужно получить подстроку, начинающуюся с определенного слова или строки. Но в некоторых случаях и она может пригодиться. Кроме того, в PHP есть и более удобные функции для поиска вхождений. Наиболее мощные из них, конечно, связаны с регулярными выражениями. Их мы рассмотрим в одной из последующих лекций.
Функция substr
Иногда мы не знаем, с каких символов начинается искомая строка, но знаем, например, что начинается она с пятого символа и заканчивается за два символа до конца исходной строки. Как выделить подстроку по такому описанию? Очень просто, с помощью функции substr(). Ее синтаксис можно записать следующим образом:
substr (исходная строка,
позиция начального символа [, длина])
Эта функция возвращает часть строки длиной, заданной параметром длина, начиная с символа, указанного параметром позиция начального символа. Позиция, с которой начинается выделяемая подстрока, может быть как положительным целым числом, так и отрицательным. В последнем случае отсчет элементов производится с конца строки. Если параметр длина опущен, то substr() возвращает подстроку от указанного символа и до конца исходной строки. Длина выделяемой подстроки тоже может быть задана отрицательным числом. Это означает, что указанное число символов отбрасывается с конца строки.
Пример 8.5. Допустим, у нас есть фраза, выделенная жирным шрифтом с помощью тега <b> языка HTML. Мы хотим получить эту же фразу, но в обычном стиле. Напишем такую программу:
<?php
$word = "<b>Hello, world!</b>";
echo $word , "<br>";
$pure_str = substr($word, 3, -4);
/* выделяем подстроку,
начиная с 3-го символа,
не включая 4 символа с конца строки */
echo $pure_str;
?>
В результате работы этого скрипта получим:
Hello, world!
Hello, world!
На самом деле решить такую задачу можно гораздо проще, с помощью функции strip_tags:
strip_tags (строка [, допустимые теги])
Эта функция возвращает строку, из которой удалены все html и php-теги. С помощью дополнительного аргумента можно задать теги, которые не будут удалены из строки. Список из нескольких тегов вводится без каких-либо знаков разделителей. Функция выдает предупреждение, если встречает неправильные или неполные теги.
<?php
$string = "<b>Bold text</b>
<i>Italic text</i>";
$str = strip_tags($string);
// удаляем все теги из строки
$str1 = strip_tags($string, '<i>');
// удаляем все теги кроме тега <i>
$str2 = strip_tags($string, '<i><b>');
// удаляем все теги кроме тегов <i> и <b>
echo $str,"<br>",$str1,"<br>", $str2;
?>
В результате получим:
Bold text Italic text
Bold text Italic text
Bold text Italic text
Приведем другой пример использования функции substr(). Допустим, у нас есть какое-то сообщение с приветствием и подписью автора. Мы хотим удалить сначала приветствие, а потом и подпись, оставив только содержательную часть сообщения.
<?php
$text = "Привет! Сегодня мы изучаем работу
со строками. Автор.";
$no_hello = substr($text, 8);
// убираем приветствие
$content = substr($text, 8, 39);
// то же самое, что substr($text, 8, -6).
// Убираем подпись.
echo $text, "<br>", $no_hello,
"<br>", $content;
?>
В результате получим:
Привет! Сегодня мы изучаем работу
со строками. Автор.
Сегодня мы изучаем работу со строками. Автор.
Сегодня мы изучаем работу со строками.
Если нам нужно получить один конкретный символ из строки, зная его порядковый номер, то не следует задействовать функции типа substr. Можно воспользоваться более простым синтаксисом – записывая номер символа в фигурных скобках после имени строковой переменной. В контексте предыдущего примера букву «р», расположенную второй по счету, можно получить так: