Функция substr

Функция strstr

Выделение подстроки

Говоря о выделении подстроки из искомой строки в языке PHP, в первую очередь стоит отметить функцию strstr():

strstr (исходная строка, строка для поиска)

Она находит первое появление искомой строки и возвращает подстроку, начиная с этой искомой строки до конца исходной строки.

Если строка для поиска не найдена, то функция вернет false. Если строка для поиска не принадлежит строковому типу данных, то она переводится в целое число и рассматривается как код символа. Кроме того, эта функция чувствительна к регистру, т.е. если мы будет параллельно искать вхождения слов «Идея» и «идея», то результаты будут разными. Вместо strstr() можно использовать абсолютно идентичную ей функцию strchr().

Пример 8.4. Выделим из строки, содержащей название и автора исследования, подстроку, начинающуюся со слова «Название»:

<?$str = "Автор: Иванов Иван (<ahref=mailto:van@mail.ru>написать письмо</a>), Название: 'Исследование языков программирования' ";echo "<b>Исходная строка: </b>",$str;if (!strstr($str, "Название")) echo "Строка не найдена<br>";else echo "<p><b>Полученная подстрока: </b>", strstr($str, "Название");?>

Пример 8.4. Использование функции strstr() (html, txt)

В результате получим:

Исходная строка: Автор: Иванов Иван (написать письмо), Название: 'Исследование языков программирования'Полученная подстрока: Название: 'Исследование языков программирования'

Для реализации регистронезависимого поиска подстроки существует соответствующий аналог этой функции – функция stristr (исходная строка, искомая строка). Действует и используется она точно так же, как и strstr(), за исключением того, что регистр, в котором записаны символы искомой строки, не играет роли при поиске.

Очевидно, что функция strstr() не слишком часто используется – на практике редко бывает нужно получить подстроку, начинающуюся с определенного слова или строки. Но в некоторых случаях и она может пригодиться. Кроме того, в PHP есть и более удобные функции для поиска вхождений. Наиболее мощные из них, конечно, связаны с регулярными выражениями. Их мы рассмотрим в одной из последующих лекций.

Иногда мы не знаем, с каких символов начинается искомая строка, но знаем, например, что начинается она с пятого символа и заканчивается за два символа до конца исходной строки. Как выделить подстроку по такому описанию? Очень просто, с помощью функции 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;?>

Пример 8.5. Использование функции substr() (html, txt)

В результате работы этого скрипта получим:

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;?>

Пример 8.6. Использование функции strip_tags() (html, txt)

В результате получим:

Bold text Italic textBold text Italic textBold 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. Можно воспользоваться более простым синтаксисом – записывая номер символа в фигурных скобках после имени строковой переменной. В контексте предыдущего примера букву «р», расположенную второй по счету, можно получить так:

echo $text{1}; // выведет символ "р"

Заметим, что номером этого символа является число один, а не два, так как нумерация символов строки производится начиная с нуля.

Раз уж мы начали говорить о символах в строке и их нумерации, то невольно возникает вопрос, сколько всего символов в строке и как это вычислить. Число символов в строке – это длина строки. Вычислить длину строки можно с помощью функции strlen (строка). Например, длина строки «Разработка информационной модели» вычисляется с помощью команды: strlen("Разработка информационной модели"); и равна 32 символам.

Итак, как выделять и находить подстроки, мы рассмотрели. Теперь научимся заменять строку, входящую в состав исходной строки, на другую строку по нашему выбору.