PHP: определения наличия в строке слова целиком

Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
5967

Подскажите пожалуйста такую функцию.

Стандартная strpos не подходит потому что она возвращает TRUE для слова "кофе" и строки "кофеин это яд", а надо что бы было FALSE.

Может кто в регулярных выражениях разбирается, подскажите.

Спасибо.

ZI
На сайте с 26.06.2006
Offline
140
ZSI
#1

А если строку разбить на подстроки с помощью explode. А затем в цикле прогнать массив на сравнение с искомым словом? :)

Хотя конечно думаю есть вариант попроще, и специалисты сейчас подскажут:)

SE
На сайте с 11.02.2007
Offline
13
#2
Sveta Prokopeva:
Подскажите пожалуйста такую функцию.

Пишите в личку помогу.

Обмен ссылками Авто-Мото, Пишу PHP скрипты любой сложности, Продажа Запчастей на Японские Авто и Спецтехнику
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#3

Так сильно медленно.

И уже кстати нашлось решение:

preg_match('~\bкофе\b~i','кофеин это яд')

Всем спасибо кто откликнулся на зов о помощи :)

Zlo_606ep
На сайте с 14.12.2006
Offline
129
#4

Массивом так:

$a=explode(' ',$stroka); // заменить все небуквы на пробелы и удалить двойные пробелы

if(in_array('кофе',$a)) echo 'yes';

а регулярным выражением, лучше так:

preg_match('/(^|[\W])кофе([\W-]|$)/i',$stroka);

или так, если дефис не подходит preg_match('/(^|[\W-])кофе([\W-]|$)/i',$stroka); - учтены положения в начале и конце строки

dkameleon
На сайте с 09.12.2005
Offline
386
#5
Sveta Prokopeva:
Подскажите пожалуйста такую функцию.
Стандартная strpos не подходит потому что она возвращает TRUE для слова "кофе" и строки "кофеин это яд", а надо что бы было FALSE.
Может кто в регулярных выражениях разбирается, подскажите.
Спасибо.

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

просто функция стрпос может возвращать не только позицию в строке, а результат нахождения.

кроме того, неоходимо корректно результат проверить. просто так в ИФ подставить от балды нельзя.

рабочий пример:

<?
$a = "кофе";
$b = "кофеин это яд";
$с = "молоко это яд";
var_dump(strpos($b, $a));
var_dump(strpos($с, $a));

if (strpos($b, $a) !== false) {
echo("string found");
}

?>

в данном случае строка встречается в позиции 0, что при подстановке в if () даёт неуспешный результат, так как ноль интерпретируется как false.

необходимо проверять успешность результата поиска, сравнивая с булевым значением, и соответствием типов (!==)

Дизайн интерьера (http://balabukha.com/)
mustafa
На сайте с 28.10.2005
Offline
202
#6

Sveta Prokopeva,

preg_match("/\ кофе\ /isU", $text);
Segey
На сайте с 23.08.2005
Offline
404
#7

mustafa,

Не понял, а зачем \ перед пробелом?

Sveta Prokopeva,


preg_match("/[^а-я]*$key[^а-я]*/isU", $text);

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

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
Коля Дубр
На сайте с 02.03.2005
Offline
153
#8
dkameleon:
на самом деле стрпос использовать корректнее, чем подключать сюда регвыражения.

Абсолютно не согласен :)

mustafa, Segey, вариант, придуманный Светой - самый правильный. \b (т.е. word boundary) специально для того и делали ;)

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
Segey
На сайте с 23.08.2005
Offline
404
#9

Коля Дубр,

Ну в общем-то согласен, можно заменить на "символ образ слово" или как так, это у мну память дырявая :)

Только синтаксис у нее какой-то непривычный, я обычно не так пишу...

dkameleon
На сайте с 09.12.2005
Offline
386
#10
Коля Дубр:
Абсолютно не согласен

Упс... мой пост можно игнорировать. всё совершенно наоборот как-то прочитал :)

Действительно, если нужно целые слова, то стрпос не пойдёт.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий