hello php!

Изучаем PHP: поиск символа в строке

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

Поиск символа в строке — использование strpos() для регистрозависимого поиска

Простейшим способом проверить, содержит ли строка определённое слово, является использование PHP функции strpos(). Она возвращает позицию первого вхождения подстроки в строке или FALSE, если соответствия не найдены. Поэтому можно сравнить значение, возвращаемое функцией strpos() с FALSE, чтобы проверить наличие подстроки. Пример:

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (strpos($the_string, $the_word) !== false) < echo 'Слово "'.$the_word.'" есть в данной строке.'; >// Вывод — Символ «Я» есть в данной строке. if (strpos($the_string, $the_character) !== false) < echo ' Символ "'.$the_character.'" есть в данной строке.'; >// Вывод — Подстрока «5 лет» есть в данной строке. if (strpos($the_string, $the_substring) !== false)

Обратите внимание, что я использовал оператор строгого неравенства (!==). Если искомое слово встречается в начале строки, функция strpos() вернёт 0. Это будет расценено оператором != как значение FALSE. Пример:

// Вывод — Символа «Я» нет в данной строке. if (strpos($the_string, $the_character) != false) < echo 'Символ "'.$the_character.'" есть в данной строке.'; >else

При поиске целого слова (например, “на”) функция также вернёт значение TRUE, если строка содержит такие слова, как “она”, “вена” или “например”.

Также можно использовать > -1 вместо !==. Потому что даже если strpos() вернёт 0 как значение индекса, он всё равно будет больше -1. Но помните, что оператор «больше» (>) работает медленнее оператора строгого неравенства (!==).

Поиск символа в строке — использование функции stripos() для регистронезависимого поиска

Для регистрозависимого поиска можно использовать функцию stripos(). Она работает аналогично функции strpos(). Единственное отличие заключается в том, что она игнорирует регистр при поиске подстроки внутри другой строки.

$the_string = «Ваня любит и яблоки, и апельсины.»; $the_word = «ваня»; $the_character = «Я»; $the_substring = «ЛЮбИт И»; // Вывод — Слово «ваня» есть в данной строке. if (stripos($the_string, $the_word) !== false) < echo 'Слово "'.$the_word.'" есть в данной строке.'; >// Вывод — Символ «Я» есть в данной строке. if (stripos($the_string, $the_character) !== false) < echo 'Символ "'.$the_character.'" есть в данной строке.'; >// Вывод — Подстрока «ЛЮбИт И» есть в данной строке. if (stripos($the_string, $the_substring) !== false)

Функция strpos() вернула бы значение FALSE во всех перечисленных выше случаях. Но функция stripos() проигнорировала регистр и вернула значение TRUE.

Читайте также:  Эффекты при наведении мышью css

Другим способом поиска, независящим от регистра, является преобразование всех строк и подстрок в одинаковый регистр, используя функции strtolower() и strtoupper(). Для проверки можно использовать strpos(). Но проще stripos().

Поиск символа в строке — использование регулярных выражений

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

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

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (preg_match(‘/лет/’, $the_string)) < echo 'Слово "'.$the_word.'" есть в данной строке.'; >// Вывод — Символ «Я» есть в данной строке. if (preg_match(‘/Я/’, $the_string)) < echo 'Символ "'.$the_character.'" есть в данной строке.'; >// Вывод — Подстрока «5 лет» есть в данной строке. if (preg_match(‘/5 лет/’, $the_string))

Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:

$the_string = ‘Фотосинтез и рискованный – длинные слова.’; // Вывод — Данная строка содержит слова из 10 и более символов. if (preg_match(‘/w/i’, $the_string))

Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:

$the_string = «Ваня любит и яблоки, и апельсины.»; $the_word = «ваня»; $the_character = «Я»; $the_substring = «ЛЮбИт И»; // Вывод — Слово «ваня» есть в данной строке. if (preg_match(‘/ваня/i’, $the_string)) < echo 'Слово "'.$the_word.'" есть в данной строке.'; >// Вывод — Символ «Я» есть в данной строке. if (preg_match(‘/Я/i’, $the_string)) < echo 'Символ "'.$the_character.'" есть в данной строке.'; >// Вывод — Подстрока «ЛЮбИт И» есть в данной строке. if (preg_match(‘/ЛЮбИт И/i’, $the_string))

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

Функции strpos() и stripos()работают быстрее, чем регулярные выражения. Но их использование для поиска точного вхождения слова может быть проблематичным.

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

$the_string = ‘Фотосинтез и рискованный – длинные слова.’; $the_word = ‘синтез’; // Вывод — Слово «синтез» имеет точное совпадение в данной строке. [ЛОЖНО положительный] if (preg_match(‘/синтез/’, $the_string)) < echo 'Слово "синтез" имеет точное совпадение в данной строке. [ЛОЖНО положительный]'; >// Вывод — Слово «синтез» имеет точное совпадение в данной строке. [ЛОЖНО положительный] if (strpos($the_string, $the_word)) < echo 'Слово "синтез" имеет точное совпадение в данной строке. [ЛОЖНО положительный]'; >// Вывод — Слово «синтез» не имеет точных совпадений в данной строке. [Ожидаемый Результат] if (preg_match(‘/bсинтезb/’, $the_string)) < echo 'Слово "синтез" имеет точное совпадение в данной строке. [ЛОЖНО положительный]'; >else

Читайте также:  Java memory management pdf

Использование strstr() для поиска подстроки

PHP функция strstr() может быть использована для проверки вхождения символа или подстроки. Она возвращает часть исходной строки, начиная с первого вхождения искомого слова и до конца. Функция вернёт значение FALSE, если подстрока не найдена. Благодаря этому можно проверить, содержит ли строка подстроку. Вот пример:

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (strstr($the_string, $the_word) !== false) < echo 'Слово "'.$the_word.'" есть в данной строке.'; >// Вывод — Символ «Я» есть в данной строке. if (strstr($the_string, $the_character) !== false) < echo 'Символ "'.$the_character.'" есть в данной строке.'; >// Вывод — Подстрока «5 лет» есть в данной строке. if (strstr($the_string, $the_substring) !== false)

Для регистронезависимого поиска используйте функцию stristr().

  1. Лучший метод поиска символа или слова в строке – PHP функции strpos(). Если нужно провести регистронезависимый поиск, применяйтеstripos(). Обе функции просты в использовании и работают быстрее остальных методов.
  2. Для сложного поиска используйте регулярные выражения. Вы также можете применять их для простого поиска, но они работают медленнее, чем функция strpos().
  3. Регулярные выражения полезны, когда вы ищете точное вхождение слова. Например, при поиске слова “сто” функция strpos() также вернёт значение TRUE, если строка содержит слово “Место”. С другой стороны, можно использовать выражение b в функции preg_match(), которая в таком случае возвратит FALSE.
  4. Используйте strstr() для регистрозависимого поиска и stristr() для регистронезависимого.

Источник

strpos

Ищет позицию первого вхождения подстроки needle в строку haystack .

Список параметров

Строка, в которой производится поиск

Если needle не является строкой, он приводится к целому и трактуется как код символа.

Если этот параметр указан, то поиск будет начат с указанного количества символов с начала строки. В отличии от strrpos() и strripos() данный параметр не может быть отрицательным.

Возвращаемые значения

Возвращает позицию, в которой находится искомая строка, относительно начала строки haystack (независимо от смещения (offset). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.

Возвращает FALSE , если искомая строка не найдена.

Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

Примеры

Пример #1 Использование ===

$mystring = ‘abc’ ;
$findme = ‘a’ ;
$pos = strpos ( $mystring , $findme );

// Заметьте, что используется ===. Использование == не даст верного
// результата, так как ‘a’ находится в нулевой позиции.
if ( $pos === false ) echo «Строка ‘ $findme ‘ не найдена в строке ‘ $mystring ‘» ;
> else echo «Строка ‘ $findme ‘ найдена в строке ‘ $mystring ‘» ;
echo » в позиции $pos » ;
>
?>

Пример #2 Использование !==

$mystring = ‘abc’ ;
$findme = ‘a’ ;
$pos = strpos ( $mystring , $findme );

// Оператор !== также можно использовать. Использование != не даст верного
// результата, так как ‘a’ находится в нулевой позиции. Выражение (0 != false) приводится
// к false.
if ( $pos !== false ) echo «Строка ‘ $findme ‘ найдена в строке ‘ $mystring ‘» ;
echo » в позиции $pos » ;
> else echo «Строка ‘ $findme ‘ не найдена в строке ‘ $mystring ‘» ;
>
?>

Читайте также:  Map string long java

Пример #3 Использование смещения

// Можно искать символ, игнорируя символы до определенного смещения
$newstring = ‘abcdef abcdef’ ;
$pos = strpos ( $newstring , ‘a’ , 1 ); // $pos = 7, не 0
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • stripos() — Возвращает позицию первого вхождения подстроки без учета регистра
  • strrpos() — Возвращает позицию последнего вхождения подстроки в строке
  • strripos() — Возвращает позицию последнего вхождения подстроки без учета регистра
  • strstr() — Находит первое вхождение подстроки
  • strpbrk() — Ищет в строке любой символ из заданного набора
  • substr() — Возвращает подстроку
  • preg_match() — Выполняет проверку на соответствие регулярному выражению

Источник

Поиск подстроки в строке с помощью PHP

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

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

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

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

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

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

При использовании этой функции, следует уделить особое внимание тому, что она может вернуть 0, в качестве результата, что говорит о нахождении подстроки в самом начале исходной строки. Поэтому нужно использовать троекратный знак равно $pos === false , для проверки успешности поиска.
Остальные «фишки» операторов сравнения описаны здесь: операторы сравнения.

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

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

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

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

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

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

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

$html = ‘content content’; if (preg_match(«!!si», $html, $matches)) < echo $matches[1]; >else

Начать рекомендую с этой статьи: регулярные выражения.

Источник

Оцените статью