→ Php поиск буквы в строке. Поиск строки в строке PHP: описание возможностей

Php поиск буквы в строке. Поиск строки в строке PHP: описание возможностей

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 )" ;
}
?>

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

Входные и выходные параметры

В общем виде синтаксис функции PHP strpos() выглядит следующим образом:

Mixed strpos (string $string , mixed $substring[, int $offset = 0 ])

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

  • Исходная строка - $string, в которой и будет произведен поиск.
  • Искомая подстрока - $substring. Данный параметр имеет тип mixed. Это означает, что кроме строкового типа данных, функция может принять любой другой. В этом случае аргумент будет преобразован в целое число и обработан, как символьный код.
  • Необязательный параметр, определяющий смещение - $offset. По умолчанию поиск производится с самого начала строки $string, а смещение равно 0. Если определить отрицательное смещение, оно будет отсчитываться с конца строки.

Функция PHP strpos() возвращает позицию, начиная с которой $substring входит в $string. Если таких вхождений несколько, будет возвращена только позиция первого из них.

Если совпадений нет, на выходе будет булево значение false.

Особенности работы

При поиске позиции подстроки важно учитывать, что нумерация символов начинается с нуля. Следовательно, 0 - одно из корректных возвращаемых значений.

При нестрогом сравнении 0 приводится к логическому типу, превращается в false и может быть воспринят как отсутствие вхождений. Поэтому очень важно использовать строгое равенство (===), учитывающее тип сравниваемых величин.

Кроме того, strpos() - пример PHP-функции, зависимой от регистра символов.

Примеры использования

Пример 1. Простое вхождение. Требуется найти позицию, на которой подстрока key входит в строку monkeys.

Пример 2. Отсутствие вхождений. Если изменить искомую строку на KEY, функция PHP strpos() не обнаружит совпадений, так как является регистрозависимой. Результатом будет булево значение false.

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

Первые две проверки определят отсутствие вхождений, несмотря на то, что подстрока life входит в исходную строку lifehack.

Пример 4. Смещение начальной позиции с помощью параметра $offset.

После установки смещения, равного 3, поиск начинается с символа "e".

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, поиск в строке легко приобретает семантику, выходит за рамки привычного синтаксиса и становится причиной для обретения реального смысла. Манипулирование смыслом для человека привычнее, для алгоритма безопаснее, а трансформация строк в объекты - это как переход от машинных кодов в мир современных языков программирования.

Поиск первого вхождения символа в строку.

Синтаксис:

String strchr(string haystack, string needle)

Данная функция работает идентично функции strstr()

Определяет отсутствие начальных символов в строке.
Синтаксис:

Int strcspn(string str1, string str2)

Функция strspn() возвращает длину начального фрагмента строки str1, состоящего полностью не из символов, которые есть в строке str2.

strpbrk()

Поиск в строке любого символа из заданного набора (PHP5)

Синтаксис:

String strpbrk (string haystack, string char_list)

strpbrk() ищет в строке haystack символы из набора char_list и возвращает строку начиная с той позиции, где был найден символ (или FALSE если символ не найден). Параметр char_list чувствителен к регистру.

$text = "This is a Simple text.";

echo strpbrk($text, "mi"); // Выдаст "is is a Simple text.", т.к. символ "i" встретится раньше

echo strpbrk($text, "S");// Выдаст "Simple text.", т.к. символы чувствительны к регистру
?>

Поиск первого вхождения подстроки в строку.
Синтаксис:

String strstr(string haystack, string needle)

Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.

$email = "[email protected]";
$domain = strstr($email, "@");
// или$domain = strstr($email, ord("@"))
echo $domain;
// выведет @mail.ru

Нахождение первого вхождения подстроки, не учитывая регистр.
Синтаксис:

String stristr(string haystack, string needle)

Функция stristr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.
В случае неудачи возвращает false.
Данная функция нечувствительна к регистру.
В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

Поиск последнего вхождения подстроки.
Синтаксис:

String strrchr(string haystack, string needle)

Функция strrchr() возвращает участок строки, заданной в параметре haystack, начиная с последнего фрагмента, указанного в параметре needle и до конца.
В случае неудачи возвращает false.
Данная функция чувствительна к регистру.
В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

// получим последний каталог в $PATH
$dir = substr(strrchr($PATH, ":"), 1);
// а здесь получим все после последнего перевода строки$text = "text 1nText2nText3";
echo substr(strrchr($text, 10), 1);

Находит позицию первого вхождения подстроки в заданной строке.
Синтаксис:

Int strpos(string where, string what [, int fromwhere])

Функция strpos() пытается найти в строке were подстроку what и в случае успеха возвращает позицию (индекс) этой подстроки в строке.
Первый символ строки имеет индекс 0. Необязательный параметр fromwhere можно задавать, если поиск нужно вести не с начало строки, а с какой-то другой позиции. В этом случае следует эту позицию передать в fromwhere. Если подстроку не удалось найти, функция возвращает false.

If(strpos($text, "a")===false) echo "Не найдено!";
// Проверка: три знака равенства

Находит позицию первого вхождения подстроки в заданной строке без учета регистра.
Синтаксис:

Int stripos(string where, string what [, int fromwhere])

Функция stripos() пытается найти в строке were подстроку what и в случае успеха возвращает позицию (индекс) этой подстроки в строке.
В отличие от strpos(), эта функция не учитывает регистр символов. Первый символ строки имеет индекс 0.
Необязательный параметр fromwhere можно задавать, если поиск нужно вести не с начало строки, а с какой-то другой позиции.
В этом случае следует эту позицию передать в fromwhere. Если подстроку не удалось найти, функция возвращает false.
Если параметр what не строка, в этом случае его значение преобразуется в целое и используется как код искомого символа.

$mystring1 = "xyz";
$mystring2 = "ABC";

$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);

// Конечно, "a" не входит в "xyz"
if ($pos1 === false) {
echo "Строка "$findme" не найдена в строке "$mystring1"";
}

// Заметьте, что используется ===. Использование == не даст верного
// результата, так как "a" в нулевой позиции.if ($pos2 !== false) {
echo "Нашел "$findme" в "$mystring2" в позиции $pos2";
}
?>

Примечание: Функция stripos() может применяться для поиска данных в двоичной форме.
Поддержка: PHP 5

Находит в заданной строке последнюю позицию, в которой находится заданный фрагмент.
Синтаксис:

Int strrpos(string where, string what)

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

Если искомый символ стоит первый в строке или его вообще нет, функция возвратит 0.

В случае, если искомый символ не найден, возвращает false.

substr_count

Находит количество вхождений фрагмента в строку.
Синтаксис:

Int substr_count(string where, string what)

Функция substr_count() возвращает число фрагментов what, присутствующих в строке where.

Echo substr_count("www.spravkaweb.ru", ".");
// Выведет 3

Определяет присутствие начальных символов в строке.
Синтаксис:

Int strspn(string str1, string str2)

Функция strspn() возвращает длину начального фрагмента строки str1, состоящего полностью из символов, которые есть в строке str2.

Echo strspn("www.spravkaweb.ru", "abc");
// Выведет 3

 

 

Это интересно: