Elementor Header #8

70. Поиск стартовой позиции

1. Введение

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

2. Основные функции для поиска стартовой позиции

2.1 Функция strpos()

Функция strpos() ищет первое вхождение подстроки в строку и возвращает её позицию (индекс). Если подстрока не найдена, функция возвращает false.

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

				
					<?php
$string = "Hello, world!";
$needle = "world";
$position = strpos($string, $needle);

if ($position !== false) {
    echo "Подстрока '$needle' найдена на позиции $position\n"; // Выводит: Подстрока 'world' найдена на позиции 7
} else {
    echo "Подстрока '$needle' не найдена\n";
}
?>

				
			

Объяснение:

  • strpos($string, $needle): Находит первое вхождение подстроки $needle в строке $string.
  • Возвращает индекс первого символа подстроки или false, если подстрока не найдена.

2.2 Функция strrpos()

Функция strrpos() ищет последнее вхождение подстроки в строку и возвращает её позицию (индекс). Если подстрока не найдена, функция возвращает false.

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

				
					<?php
$string = "Hello, world! Hello again!";
$needle = "Hello";
$position = strrpos($string, $needle);

if ($position !== false) {
    echo "Последнее вхождение подстроки '$needle' найдено на позиции $position\n"; // Выводит: Последнее вхождение подстроки 'Hello' найдено на позиции 13
} else {
    echo "Подстрока '$needle' не найдена\n";
}
?>

				
			

Объяснение:

  • strrpos($string, $needle): Находит последнее вхождение подстроки $needle в строке $string.

2.3 Функция stripos()

Функция stripos() работает аналогично strpos(), но поиск осуществляется без учёта регистра.

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

				
					<?php
$string = "Hello, World!";
$needle = "world";
$position = stripos($string, $needle);

if ($position !== false) {
    echo "Подстрока '$needle' найдена на позиции $position (без учёта регистра)\n"; // Выводит: Подстрока 'world' найдена на позиции 7 (без учёта регистра)
} else {
    echo "Подстрока '$needle' не найдена\n";
}
?>

				
			

Объяснение:

  • stripos($string, $needle): Находит первое вхождение подстроки $needle в строке $string, игнорируя регистр.

2.4 Функция strripos()

Функция strripos() ищет последнее вхождение подстроки в строку без учёта регистра.

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

				
					<?php
$string = "Hello, World! Hello again!";
$needle = "hello";
$position = strripos($string, $needle);

if ($position !== false) {
    echo "Последнее вхождение подстроки '$needle' найдено на позиции $position (без учёта регистра)\n"; // Выводит: Последнее вхождение подстроки 'hello' найдено на позиции 13 (без учёта регистра)
} else {
    echo "Подстрока '$needle' не найдена\n";
}
?>

				
			

Объяснение:

  • strripos($string, $needle): Находит последнее вхождение подстроки $needle в строке $string, игнорируя регистр.

3. Пограничные случаи и распространённые ошибки

3.1 Подстрока не найдена

Если подстрока не найдена, функции strpos(), strrpos(), stripos(), и strripos() возвращают false. Убедитесь, что вы правильно проверяете результат и используете строгое сравнение (!== false), чтобы избежать неверных результатов.

Пример:

				
					<?php
$string = "Hello, world!";
$needle = "notfound";
$position = strpos($string, $needle);

if ($position === false) {
    echo "Подстрока '$needle' не найдена\n"; // Правильное использование проверки
} else {
    echo "Подстрока '$needle' найдена на позиции $position\n";
}
?>

				
			

3.2 Использование неправильного регистра

При использовании функций, игнорирующих регистр (stripos() и strripos()), убедитесь, что вы понимаете, что поиск производится без учёта регистра. Это может привести к неожиданным результатам при работе с регистром.

Заключение

Знание функций для поиска стартовой позиции подстроки в строке позволяет эффективно обрабатывать текстовые данные и находить нужные позиции для последующей обработки. Используйте функции strpos(), strrpos(), stripos(), и strripos() в зависимости от ваших требований к регистру и необходимости поиска первого или последнего вхождения подстроки.

4. Тестовое задание

Для закрепления материала выполните следующее задание:

  1. Напишите код, который ищет первое и последнее вхождение подстроки «PHP» в строке "Learn PHP and PHP programming!" и выводит их позиции.

  2. Напишите код, который ищет подстроку «php» в строке "Learn PHP and PHP programming!", игнорируя регистр, и выводит её позицию.

  3. Создайте строку с текстом на английском языке и выполните поиск подстроки с учётом регистра и без учёта регистра. Проверьте результаты.

Пример выполнения задания:

				
					<?php
// 1. Первое и последнее вхождение подстроки "PHP"
$string = "Learn PHP and PHP programming!";
$needle = "PHP";
$firstPosition = strpos($string, $needle);
$lastPosition = strrpos($string, $needle);

echo "Первое вхождение '$needle' на позиции $firstPosition\n";
echo "Последнее вхождение '$needle' на позиции $lastPosition\n";

// 2. Поиск подстроки "php" без учёта регистра
$needle = "php";
$position = stripos($string, $needle);
echo "Подстрока '$needle' найдена на позиции $position (без учёта регистра)\n";

// 3. Поиск с учётом и без учёта регистра
$text = "Hello World!";
$search = "world";
$caseSensitivePosition = strpos($text, $search);
$caseInsensitivePosition = stripos($text, $search);

echo "Поиск с учётом регистра: ";
if ($caseSensitivePosition === false) {
    echo "Подстрока '$search' не найдена\n";
} else {
    echo "Найдено на позиции $caseSensitivePosition\n";
}

echo "Поиск без учёта регистра: ";
if ($caseInsensitivePosition === false) {
    echo "Подстрока '$search' не найдена\n";
} else {
    echo "Найдено на позиции $caseInsensitivePosition\n";
}
?>

				
			

Удачи в выполнении задания и дальнейшем изучении PHP!

logo