PHP поиск в строке – обзор доступного инструментария

PHP поиск в строке – обзор доступного инструментария

От автора: честно признаюсь, что завидую соседу! Вчера зашел к нему в гараж, а у него там столько ключей и отверток! Все по полочкам развешаны, по размерам; ярко блестят хромом в свете светодиодных ламп. Ну, прям как набор инструментов, с помощью которых происходит PHP поиск в строке.

Что такое строки

Прежде, чем окунаться в данную тему «по уши», сразу предупреждаю, что будет немного нудно. Честно говоря, я сам могу заскучать при написании этого материала. Так что сразу прошу меня простить, если начну дурачиться :) .

Теперь разберемся, что собой представляют строки. Точнее, как к ним «относится» PHP. В данном языке строки представляют собой массивы, состоящие из набора символов. Так это или нет, узнаем на практике по ходу рассмотрения примеров.

Ладно, хватит болтовни! Приступим к изучению этого важного материала. Кстати, если тема важная, то обязательно скучная почему-то :) .

Строка в строке

Это уже не программирование, а матрешка какая-то получается! Так и есть: любой числовой или символьный массив можно разбить на несколько частей. Рассмотрим, как происходит в PHP поиск заданной подстроки в строке.

Для этого используем функцию, название которой звучит в тему – strstr(). В качестве аргументов она принимает основную строку, подстроку и необязательный параметр before_needle, который имеет тип bool. Если установить его в true, тогда функция вернет часть подстроки слева от искомой, но без нее:

<?php
$str  = '123456789 0 987654321';
$str2 = strstr($str, '0', true);
echo $str2;
?>

Результат выполнения:

Если не указывать before_needle, тогда strstr() вернет часть строки, которая начинается с указанной. Например:

<?php
$str= '123456789 0 987654321';
$str1=strstr($str, '0');
echo $str1;
?>

Строка может состоять не только из нескольких слов, но и даже из одного символа. Эта особенность в совокупности с рассматриваемой функцией широко применяется на практике. Например, для «обрезки» пользовательских данных:

<?php
$str= 'superman@mail.com';
$str1=Фу($str,'@',true);
echo $str1;
?>

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

Другие варианты

Функция strstr() является «регистрочувствительной». Что не всегда уместно, особенно для обработки данных, вводимых пользователями в различные формы. Но в PHP можно всегда найти альтернативный вариант.

stristr() в отличие от своего «собрата» регистронезависима. Проверим действие обеих функций на практике. Используем для этого Василия Сидоровича Разгильдяева. Вы его не узнаете? Это же двоюродный брат Василия Пупкина :) . Но давайте вернемся к нашим функциям и осуществим поиск слова в строке PHP с помощью каждой из них. При этом мы будем намеренно использовать различные регистры букв в подстроке (искомой) и строке:

<?php
$string = 'Hello, WORLD!';
  if(stristr($string, 'world') === FALSE) {
    echo "Мир не найден!";
  }
  else
  echo stristr($string, 'world');
?>

Теперь испробуем функцию strstr():

<?php
$string = 'Hello, WORLD!';
  if(strstr($string, 'world') === FALSE) {
    echo "Мир не найден!";
  }
  else
  echo strstr($string, 'world');
?>

Как видим, данная функция более капризная, и использовать ее в PHP для поиска текста в строке не всегда удобно.

Позиция искомого

Но существуют и другие элементы языка, которые с успехом могут справиться с данной задачей. Вдобавок некоторые из них обладают и другими полезными «талантами». Например, возвращают позицию вхождения искомой строки.

<?php
$string = 'Hello, WORLD!';
  if(strpos($string, 'world') === FALSE) {
    echo "Мир не найден!";
  }
  else
  echo $position=strpos($string, 'world');
?>

Упс! Извиняюсь за неточность. Кажется, strops() также страдает «регистрозависимостью», потому что искомый мир опять не найден. Надеюсь, для этого «недуга» найдется лекарство, и мы сможем с помощью PHP поискать вхождения в строке.

И я нашел такое лекарство! Это функция stripos(). Давайте сразу проверим, обладает ли она «иммунитетом». А то опять прошляпим :) .

<?php
$string = 'Hello, WORLD!';
  if(stripos($string, 'world') === FALSE) {
    echo "Мир не найден!";
  }
  else
  echo stripos($string, 'world');
?>

Все, скукотища на сегодня достаточно! Если вы думаете, что это скучная тема, то вы ошибаетесь. Мы с вами еще не дошли до PHP поиска в строке с помощью регулярных выражений – вот где полный «капут». Но этот ужас я припасу на следующий Хэллоуин :) . До следующего занятия!

Хотите изучить регулярные выражения на PHP?

Прямо сейчас посмотрите 12-ти часовой курс по регулярным выражениям на PHP!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree