Php содержание подстроки в строке. Функция strpos в PHP: определение позиции подстроки. Поиск подстроки с использованием функции strpos

PHP предлагает использовать различные варианты поиска строк в других строках. Есть обычные функции. Есть возможность использования регулярных выражений. Разработчик может разработать собственный вариант поиска информации при соблюдении правил синтаксиса.

Поиск строк не ограничивается фактом подтверждения наличия нужного символа или строки в нужном месте. Строкой может выступать объект - это более емкое информационное понятие, чем просто строка. Поиск особенно эффективен, когда момент обнаружения сопровождается немедленным принятием решения, а не требует дополнительной обработки.

Основные функциональные возможности поиска

Поиск - функция strpos(). Ее результат - или булевое значение, или позиция вхождения искомого (второй параметр) в строке (первый параметр) с позиции (третий параметр). Если последний параметр не задан, поиск выполняется с нулевой позиции строки.

В данном примере PHP-поиск в строке показан на примере одиночного символа. Вместо символа можно использовать строку. PHP не ограничивает программиста в размерах строк, но разумные пределы имеют существенное значение.

Искать строки в строках можно с учетом регистра, с первого или последнего вхождения и использовать регулярные выражения. Как и во всех остальных случаях, существенное значение имеет кодировка страницы, на которой находится скрипт.

В некоторых случаях целесообразно использовать вариант iconv_strpos(), а не просто strpos(). В подавляющем большинстве случаев поиск подстроки в строке PHP обеспечит идеально точно: достаточно держать кодировку страницы и строки в одной кодировке.

Особенности стандартного подхода

Если поиск подстроки в строке PHP не имеет результата: искомого нет, и результат будет логическим значением. Однако если искомая подстрока начинается с нулевой позиции, то это следует выделить особо в операциях сравнения и анализа результата. Когда результат равен 0 - это ненамного отстоит дальше от результата false.

В отличие от JavaScript, в отношении строк PHP более консервативен, и для него по сей день строки - это строки. Работа с ними - это строчные функции: от простых уровня strpos до сложных, использующих регулярные выражения.

Искать нужно, чтобы:

  • принять решение о направлении алгоритма;
  • заменить искомое на другое;
  • проверить событие;
  • увеличить счетчик статистики и пр.

Это привычная логика алгоритма, JavaScript пошел дальше и признал «строки» объектами. Но одного признания на практике мало. Если абстрагироваться от понятия «строка» и понимать под ним реальный объект, вопрос "поиск строки в строке" PHP позволит сформулировать в контексте реального метода, например, яблоко может быть спелым, не только когда оно красное.

Классический поиск слова "красное" в описании яблока не есть гарантия достоверного ответа о спелости фрукта. Если яблоко представлено не строкой, а объектом, то поиск строки в строке PHP выполнит не как strpos, а как метод реального объекта. При этом нет никакой гарантии, что в теле метода будет использоваться именно функция strpos.

Стандартные функции в нестандартных решениях

Характерная черта привычной обработки информации (человеком): позиция, где что находится, имеет значение, когда именно она является целью или решением. Во всех остальных случаях не важно, где что присутствует, важно, что оно обозначено и является основанием для дальнейших действий.

Косвенно поиск выполняет в функциях trim, str_replace и других. Интересный вариант поиска доступен при совместном применении explode/implode и манипулировании массивами.

Если использовать всю функциональность PHP, поиск в строке легко приобретает семантику, выходит за рамки привычного синтаксиса и становится причиной для обретения реального смысла. Манипулирование смыслом для человека привычнее, для алгоритма безопаснее, а трансформация строк в объекты - это как переход от машинных кодов в мир современных языков программирования.

Предположим, что нам нужно найти подстроку в строке при помощи php.

Для решения этой задачи подходят разные инструменты.

Поиск подстроки с использованием функции strpos

Функция strpos возвращает позицию первого вхождения подстроки.

$mystring = "abc"; $findme = "a"; $pos = strpos($mystring, $findme); // Заметьте, что используется ===. Использование == не даст верного // результата, так как "a" находится в нулевой позиции. if ($pos === false) { echo "Строка "$findme" не найдена в строке "$mystring""; } else { echo "Строка "$findme" найдена в строке "$mystring""; echo " в позиции $pos"; }

Функция возвращает либо порядковый номер первого символа подстроки в исходной строке, либо false, в случае если ничего не найдено.

Для этой функции существует регистронезависимый аналог: stripos

Еще одна функция для этой задачи: strrpos . Она находит последнее вхождение подстроки.
У нее, разумеется, тоже имеется регистронезависимый вариант: strripos

Если функция strpos не подходит для вашей цели, то найдите другой инструмент.
Для работы со строками существует также масса функций, о существовании которых необходимо знать: функции для работы со строками.

Поиск подстроки при помощи функции preg_match

Эта функция производит поиск подстроки при помощи регулярного выражения.

Регулярное выражение — это шаблон, который сравнивается со строкой. Под один шаблон может подходить сразу множество разных строк.

Они пригодятся если вам нужно производить поиск не по конкретной подстроке, а найти все строки, обладающие свойствами, описанными при помощи регулярного выражения. Знание этой темы сильно расширяет ваши возможности в работе со строками.

strripos — Find the position of the last occurrence of a case-insensitive substring in a string

Description

Find the numeric position of the last occurrence of needle in the haystack string.

Unlike the strrpos() , strripos() is case-insensitive.

Parameters

The string to search in.

If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call to chr() should be performed.

If zero or positive, the search is performed left to right skipping the first offset bytes of the haystack .

If negative, the search is performed right to left skipping the last offset bytes of the haystack and searching for the first occurrence of needle .

This is effectively looking for the last occurrence of needle before the last offset bytes.

Return Values

Returns the position where the needle exists relative to the beginnning of the haystack string (independent of search direction or offset).

Note : String positions start at 0, and not 1.

Returns FALSE if the needle was not found.

Warning

This function may return Boolean FALSE , but may also return a non-Boolean value which evaluates to FALSE . Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Examples

Example #1 A simple strripos() example

$haystack = "ababcd" ;
$needle = "aB" ;

$pos = strripos ($haystack , $needle );

if ($pos === false ) {
echo "Sorry, we did not find ($needle ) in ($haystack )" ;
} else {
echo "Congratulations!\n" ;
echo "We found the last ($needle ) in ($haystack ) at position ($pos )" ;
}
?>