PHP如何替换字符串中的确切单词

时间:2012-04-03 01:24:15

标签: php replace

我有这个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字词包含isstr_replace()也删除了Phisz' dog?

我想要的是如何从句子中删除单词/ vebs而不影响其他单词。我的意思是删除 EXACT VERB / WORD .....并且不区分大小写......

预期结果将是这样的

新句子:{{1}}

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

由于你想要删除精确的动词,你可以在每个动词周围加上空格,这样你的列表就像这样,用_表示空格

" is "
" where "

然后让不区分大小写使所有动词小写,然后将你的动词包装在strtolower()

strtolower($sentence)

所以你的替换看起来像这样:

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