2012-04-03 39 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? //在isPhisz也将被删除。

我发现问题是Phisz单词包含is,它也被str_replace()删除。

我想要的是如何从句子中删除单词/文字而不影响其他单词。我的意思是除去EXACT动词/ WORD .....在不区分大小写...

了预期的结果会是这样

新句子:Phisz' dog?

回答

6

使用正则表达式像/\bword\b/将只替换整个单词。 \b表示单词边界。所以,你可以做这样的事情:

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

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

你想万一字包含元字符 – Cal 2012-04-03 01:39:08

+0

啊哈,好点的也可以使用'preg_quote()''上$ verb'。 – deceze 2012-04-03 01:44:33

+0

你的回答给了我点先生...谢谢...但是我发现这也.... $ verbslist = str_replace(“,”,“|”,$动词); $ pattern =“/\b(".$verbslist。“)\双”; $ newq2 = preg_replace($ pattern,“”,$ newq); – 2012-04-03 01:50:35

0

既然要删除准确的动词就可以把周围每个动词的空间让你的名单将是这样用_表示空格

" is " 
" where " 

然后得到不区分大小写要让所有的动词小写,然后换你的动词用strtolower()

strtolower($sentence) 

所以你更换看起来是这样的:

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

先生...为什么我想找到一些自动化的方法,因为这是非常耗时的...并且不能保证运作良好..因为...不会与第一个词和最后一个词一起工作....我的动词列表很长,在每一个动词列表中都会增加空格... – 2012-04-03 01:48:38

+0

这会错过标点符号后面的动词,比如“Who cares?”或“我喝酒,但我不是喝醉了。” – FtDRbwLXw6 2012-04-03 01:57:52

+0

@rrcknlsn是的...这就像使用这种方式的自杀... – 2012-04-03 02:08:53