在PHP中替换Word的确切出现?

时间:2013-08-26 10:58:15

标签: php

我需要反复删除文章中的某些停用词。目前我正在使用函数str_replace来实现这一目标。作为第一个参数,我使用停止列表数组变量来删除任何停用词的出现。这样可以正常工作,除了它还删除了在单词中间出现的任何匹配(即,如果停用词是“th”,它将从“the”,“then”等中删除“th”。

现在,如果我使用纯文本提供参数,我可以在单词的任一侧添加一个空格来弥补这种情况。但是,由于我使用的是变量数组,因此无效。我也尝试使用concatenate运算符,但这似乎不是函数内部的合法连接符。

当前代码如下所示:

$i = str_replace(" " . $swarray . " ", $string );

3 个答案:

答案 0 :(得分:7)

您需要使用带有字边界的preg_replace。例如下面我们只是替换单词the,同时避免替换themthen

$string = preg_replace('/\bthe\b/', '', $string);

答案 1 :(得分:4)

带有preg_replace

array

$find = array('/\bth\b/', '/\bthe\b/', '/\bthen\b/');
$replace = array('', '', '');

echo $i = preg_replace($find, $replace, $string);

$find = array('/\bth\b/', '/\bthe\b/', '/\bthen\b/');

echo $i = preg_replace($find, "", $string);

正则表达式匹配文档:http://www.php.net/manual/en/function.preg-replace.php#89364

\b Match a word boundary

答案 2 :(得分:0)

这应该有效:

$i = $string;
foreach($swarray as $word) {
  $i = str_replace(" " . $word . " ", "", $i );
}