Перейти к содержимому

Как найти слово в строке php

  • автор:

PHP: Поиск части слова в строке

Есть строка со списком слов. Есть определенное слово, которое нужно найти в этой строке. Я использую функцию strpos() , всё ок:

$mystring = 'apple,orange,pear,banana,mango'; $findme = 'apple'; $pos = strpos($mystring, $findme); if ($pos !== false) < echo "Строка '$findme' найдена в строке '$mystring'"; echo " в позиции $pos"; >else

Однако, я хотел бы сделать поиск немного гибким, чтобы поиск осуществлялся по частям искомого слова. Например, слово для поиска будет не «apple«, а «pineapple«. В нашем случае функция ничего не найдет. Я думаю, что можно эту задачу можно решить путем поиска каждого слова из списка в строке $findme :

$mystring = 'apple,orange,pear,banana,mango'; $findme = 'pineapple'; $arr= explode(",", $mystring ); foreach($arr as $v) < $pos = strpos($findme, $v); if ($pos !== false) < echo "Строка '$findme' найдена в строке '$mystring'"; echo " в позиции $pos"; break; >else < echo "Строка '$findme' не найдена в строке '$mystring'"; >> 

Но а если словарь $mystring состоит из сотен тысяч слов. Тогда мой вариант будет работать очень медленно. Подскажите, пожалуйста, как можно решить эту проблему? Спасибо!

Как найти слово в строке, и вывести текст?

Добрый День, у меня вопрос: Есть строка например: abracadabra-cudsa_123-qwerty-text_a-abraca-trollololo-nlo Если в строке есть слово(маркер) = text_a то вывести: Привет Васа! Если в строке есть слово(маркер) = text_b то вывести: Привет Лана! Если в строке не найдено text_a или text_b то вывести дефолт: Привет Мир! Я делаю так:

$text = $_GET['text']; $main_str = $text; //искомый текст $my_str = 'text_a'; $pos = strpos($main_str, $my_str); if ($pos === false) < echo 'Привет Мир!'; >else

Но тут проблема что ищет только одно слово (маркер) Помогите решить! Спасибо!
Отслеживать
3,747 2 2 золотых знака 14 14 серебряных знаков 23 23 бронзовых знака
задан 25 мар 2016 в 7:38
John Freeman John Freeman
139 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

$text = $_GET['text']; $main_str = $text; if (strpos($main_str, 'text_a') !== false) < echo 'Привет Васа!'; >elseif (strpos($main_str, 'text_b') !== false) < echo 'Привет Лана!'; >else

P.S. А что нужно делать, если найдены оба?

Отслеживать
ответ дан 25 мар 2016 в 7:44
user200141 user200141
1,037 1 1 золотой знак 7 7 серебряных знаков 18 18 бронзовых знаков

$text = $_GET['text']; $main_str = $text; $has_a = strpos($main_str, 'text_a') !== false; $has_b = strpos($main_str, 'text_b') !== false; if ($has_a && $has_b) < echo 'ОШИБКА'; >else < if ($has_a) < echo 'А'; >elseif ($has_b) < echo 'Б'; >else < echo 'ПУСТО'; >> 

Отслеживать
ответ дан 25 мар 2016 в 8:25
3,601 3 3 золотых знака 18 18 серебряных знаков 23 23 бронзовых знака

раз уж стоит метка регулярные-выражения

Отслеживать
ответ дан 25 мар 2016 в 8:07
Nikola Tesla Nikola Tesla
431 3 3 серебряных знака 8 8 бронзовых знаков

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

Commented 25 мар 2016 в 8:20

все относительно, иногда быстрее написать регулярку с определенным синтаксисом и поведением, чем искать в ручную средствами php. Регулярка почти всегда лучше

Commented 25 мар 2016 в 8:52

@ВасилийБарбашев: Не соглашусь с вами. Регулярка почти всегда лучше там, где она нужна — это да. Там где нет необходимости, лучше простыми строковыми функциями обойтись. Сложнее от этого не получится. Вы забываете что PHP написан на C. А в C строка — это на самом деле очень сложная структура из последовательностей char . Хотя с высоты php нам кажется что мы работаем со строками так-же как и, например, с цифрами.

Commented 25 мар 2016 в 9:16

я немного не об этом, понятно что из строки в 5 символов, узнать есть ли там символ гораздо проще с помощью спец метода в php, чем в регулярке, но для более сложного разбора (не просто поиска строки в подстроке) регулярка не обходима, и она на самом деле не такая уж и медленная, иначе был бы придуман альтернативный способ обработки)

Commented 25 мар 2016 в 10:00

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

Как найти слово в строке, и вывести его?

как мне в ней найти вхождение affiliatewire_%nameID% где %nameID% всегда разное слово и вывести %nameID%
affiliatewire_

param0_test1_param1_affiliatewire_name1_test2_param2_param3 param0_test1_param1_affiliatewire_name_test2_param2_param3 param0_test1_param1_affiliatewire_trollolo_test2_param2_param3 

Отслеживать
задан 2 июн 2016 в 9:58
John Freeman John Freeman
139 1 1 золотой знак 2 2 серебряных знака 12 12 бронзовых знаков
Commented 2 июн 2016 в 10:45

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Array ( [0] => Array ( [0] => name1 [1] => name [2] => trollolo ) ) 

Пояснения по регулярному выражению:

(? <=affiliatewire_) - ищем текст, которому предшествует выражение affiliatewire_ .
[^_\r\n]++ — ищем максимально длинную последовательность из символов, кроме _ и символов переноса строк.

Проверить работу PHP-кода можно на Ideone, а регулярного выражения на regex101.

Отслеживать
ответ дан 2 июн 2016 в 11:35
19.9k 5 5 золотых знаков 44 44 серебряных знака 61 61 бронзовый знак
а если вот так: ` /affiliatewire_(.[^_]*)_/` ??
Commented 2 июн 2016 в 13:01

@JohnFreeman Не захватит значение, если оно будет последним в строке. Например, вот такое: param0_test1_param1_affiliatewire_name не найдет. Я дал вам ссылку на сервис для проверки.

Как проверить, содержит ли строка определенное слово в PHP

Вы можете использовать PHP-функцию strpos() , чтобы проверить, содержит ли строка определенное слово или нет.

Функция strpos() возвращает позицию первого вхождения подстроки в строку. Если подстрока не найдена, возвращается false . Также обратите внимание, что позиции строки начинаются с 0 , а не с 1 .

Давайте посмотрим на пример, чтобы понять, как работает эта функция:

 else < echo "Word Not Found!"; >?>

beget banner 480x320 skillbox banner 480x320 kwork banner 480x320

Читайте также

Похожие примеры:
  • Как посчитать, сколько раз подстрока встречается в строке в PHP
  • Как заменить слово внутри строки в PHP
  • Как разбить строку на массив в PHP

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

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