Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2008, 18:01   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию preg_match();

Как определить, что $str является целым словом, а не частью другого слова?
Я написал
Код:
if (!preg_match("/[0-9A-Za-z]$str[0-9A-Za-z]/", $MyString))
т.е. если справа и слева нет других символов, то считаем, что это слово целое. Но это как-то "криво" смотрится. Как написать правильно?
_SERGEYX_ вне форума Ответить с цитированием
Старый 08.10.2008, 09:31   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Если это целое слово а не часть, что после него и перед ним могут быть символы "whitespace,." и другие сами подумайте какие у Вас могут быть. Соответственно если другие то часть...
PHP код:
$str='aaa';
$MyString=' aaa kkkkaaa ';
preg_match_all("|[ .,]+$str+[ .,]|"$MyString$outPREG_SET_ORDER);
var_dump($out); 
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 08.10.2008, 09:47   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

mv28jam? спасибо. Сейчас попробую.
_SERGEYX_ вне форума Ответить с цитированием
Старый 08.10.2008, 09:56   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Есть метасимвол - граница слова \b

Код:
 $s = 'abc'; 
 $dict ='abc, .cde'; 
 echo preg_match("/\b$s\b/", $dict, $a);   // 1

 $s = 'ab'; 
 echo preg_match("/\b$s\b/", $dict, $a);   // 0
alexBlack вне форума Ответить с цитированием
Старый 08.10.2008, 14:06   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Сенкс. preg_match("/\b$s\b/", $dict, $a) работает как нужно.
Но есть еще один дилетанский вопрос.
Допустим я это слово хочу выделить жирным
Код:
  $s = 'привет';
 $dict ="X привет Y, XприветY";
 if (preg_match("/\b$s\b/", $dict, $a))
 /*выделим его жирным  */
$dict = str_replace( $a, "<b>$s</b>", $dict);
echo $dict;
Слово "привет" выделится везде (это логично, т.к. условие выполнено).
X привет Y, XприветY
А как выделить только Целые слова?
В Delphi бы написал что-нибудь, типа if (слово_целое)... and (Pos(...) = ...), а пхп не моя стихия.
_SERGEYX_ вне форума Ответить с цитированием
Старый 08.10.2008, 15:05   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

можно так:

Код:
 $s = 'abc'; 
 $dict ='abc, abcd abc .cde'; 

 echo preg_replace("/(\b$s\b)/", "<b>\\1</b>", $dict);
или даже так:

Код:
 $s = array(
       '/(\bbegin\b)/', 
       '/(\bend\b)/', 
       '/(\bprocedure\b)/'
      ); 

 $dict ='procedure proc; begin beginprocedure := e; end;'; 
 echo preg_replace($s, "<b>\\1</b>", $dict);

Последний раз редактировалось alexBlack; 08.10.2008 в 15:18.
alexBlack вне форума Ответить с цитированием
Старый 09.10.2008, 09:35   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

alexBlack, спасибо. Все получилось.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск