2012-04-03 3 views
1

У меня есть этот PHP кодPHP, как заменить точные слова в строке

$filename = "verbs.php"; // http://alylores.x10.mx/vega/verbs2.php 
$handle = fopen($filename, "r"); 
$verbs = fread($handle, filesize($filename)); 
fclose($handle); 

и я использовал PHP explode() функция

разделить слова в массив

$verbslist = explode(",", $verbs);

и у меня также есть строка, например:

$sentence = "Where is Phisz' dog?";

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

$newsentence = str_replace($verbslist,"",$sentence);

но результат:

новый Приговор: Phz' dog? // is на Phisz был также удален.

и я понял, что проблема заключается в том, что слова Phisz содержат is которые также были удалены с помощью str_replace().

что я хочу, как я могу удалить слова/вебы из предложения, не затрагивая другие слова. Я имею в виду удаления EXACT VERB/​​СЛОВО ..... и в случае нечувствительной ...

, что ожидаемый результат будет как этот

новое предложение: Phisz' dog?

ответ

6

Использование регулярных выражений как /\bword\b/ заменит только слово в целом. \b обозначает границу слова. Так что вы можете сделать что-то вроде этого:

foreach ($verblist as &$verb) { 
    $verb = '/\b' . preg_quote($verb, '/') . '\b/'; 
} 

$newsentence = preg_replace($verblist, '', $sentence); 
+1

вы хотите использовать 'preg_quote()' на '$ verb' в случае, если слово содержит мета-символы – Cal

+0

ааа, хорошая точка. – deceze

+0

ваш ответ дает мне точку сэр ... спасибо ... однако я нашел это также .... $ verbslist = str_replace (",", "|", $ verbs); $ pattern = "/\b(".$verbslist.") \ B/I"; $ newq2 = preg_replace ($ pattern, "", $ newq); –

0

Так как вы хотите, чтобы удалить точные глаголы вы можете поставить пробела вокруг каждый из глаголов, так что ваш список будет что-то вроде этого с _ обозначающим пространства

" is " 
" where " 

и т.д.

Тогда, чтобы получить регистрозависимости сделать все ваши глаголы строчную, а затем обернуть глаголы в strtolower()

strtolower($sentence) 

Так что ваши замены будет выглядеть примерно так:

$newsentence = str_replace($verbslist,"",strtolower($sentence)); 
+0

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

+0

Это пропустит глаголы, за которыми следуют знаки препинания, например «Кому это нужно?». или «Я пью, но я не пьян». – FtDRbwLXw6

+0

@rrcknlsn да ... это похоже на самоубийство, чтобы использовать такой способ ... –

Смежные вопросы