PHP如何替换字符串中的确切单词
我有这个php代码PHP如何替换字符串中的确切单词,php,replace,Php,Replace,我有这个php代码 $filename = "verbs.php"; // http://alylores.x10.mx/vega/verbs2.php $handle = fopen($filename, "r"); $verbs = fread($handle, filesize($filename)); fclose($handle); 我使用了PHPexplode()函数 将单词拆分为数组 $verbslist=explode(“,”,$verbs) 我还有一个字
$filename = "verbs.php"; // http://alylores.x10.mx/vega/verbs2.php
$handle = fopen($filename, "r");
$verbs = fread($handle, filesize($filename));
fclose($handle);
我使用了PHPexplode()
函数
将单词拆分为数组
$verbslist=explode(“,”,$verbs)代码>
我还有一个字符串,比如:
$句子=“菲斯的狗在哪里?”代码>
然后我使用str_replace()
函数删除句子中的动词和一些特定单词,这样剩下的就只有主语了
$newsentence=str_replace($verbslist,“,$句子)代码>
但结果是:
新句子:Phz'dog?
//在Phisz
上的也被删除
我发现问题在于Phisz
单词包含is
,它也被str_replace()
删除了
我想要的是如何在不影响其他单词的情况下删除句子中的单词/VEB。我的意思是删除确切的动词/单词。。。。。而且不区分大小写
预期的结果是这样的
新句子:Phisz'dog?
使用像/\bword\b/
这样的正则表达式将仅替换整个单词<代码>\b
表示单词边界。所以你可以这样做:
foreach ($verblist as &$verb) {
$verb = '/\b' . preg_quote($verb, '/') . '\b/';
}
$newsentence = preg_replace($verblist, '', $sentence);
$newsentence = str_replace($verbslist,"",strtolower($sentence));
使用像/\bword\b/
这样的正则表达式将仅替换整个单词<代码>\b
表示单词边界。所以你可以这样做:
foreach ($verblist as &$verb) {
$verb = '/\b' . preg_quote($verb, '/') . '\b/';
}
$newsentence = preg_replace($verblist, '', $sentence);
$newsentence = str_replace($verbslist,"",strtolower($sentence));
因为你想删除确切的动词,你可以在每个动词周围加空格,所以你的列表应该是这样的,用u表示空格
" is "
" where "
等等
然后,为了不区分大小写,将所有动词的大小写改为小写,然后将动词包装在strtolower()中
因此,您的替换将如下所示:
foreach ($verblist as &$verb) {
$verb = '/\b' . preg_quote($verb, '/') . '\b/';
}
$newsentence = preg_replace($verblist, '', $sentence);
$newsentence = str_replace($verbslist,"",strtolower($sentence));
因为你想删除确切的动词,你可以在每个动词周围加空格,所以你的列表应该是这样的,用u表示空格
" is "
" where "
等等
然后,为了不区分大小写,将所有动词的大小写改为小写,然后将动词包装在strtolower()中
因此,您的替换将如下所示:
foreach ($verblist as &$verb) {
$verb = '/\b' . preg_quote($verb, '/') . '\b/';
}
$newsentence = preg_replace($verblist, '', $sentence);
$newsentence = str_replace($verbslist,"",strtolower($sentence));
如果一个单词包含元字符,您还需要在$verb
上使用preg_quote()
,先生,您的答案告诉了我重点。。。谢谢然而,我发现这也…$verbslist=str_replace(“,”,“|,$verbs)$pattern=“/\b”(.$verbslist.)\b/i”$newq2=preg_replace($pattern,“,$newq);不要忘记在foreach
循环后取消($verb)
,以防止未定义的行为。如果单词包含元字符,您还想在$verb
上使用preg_quote()
,先生,您的答案告诉了我重点。。。谢谢然而,我发现这也…$verbslist=str_replace(“,”,“|,$verbs)$pattern=“/\b”(.$verbslist.)\b/i”$newq2=preg_replace($pattern,“,$newq);不要忘记在foreach
循环之后取消设置($verb)
,以防止未定义的行为。先生。。。为什么我想找到一些自动的方法,因为这非常耗时。。。也不能保证它能正常工作。。因为。。。这不适用于第一个词和最后一个词。。。。我的详细列表很长,每一个都要加上空格…这会漏掉后面跟标点符号的动词,比如“谁在乎?”或“我喝酒,但我不是酒鬼。”先生。。。为什么我想找到一些自动的方法,因为这非常耗时。。。也不能保证它能正常工作。。因为。。。这不适用于第一个词和最后一个词。。。。我的详细列表很长,每一个都要加上空格……这会漏掉后面跟标点符号的动词,比如“谁在乎?”或“我喝酒,但我不是酒鬼。”