这是一个版本strtok
$patterns = ["are", "finite", "get", "er"];
$string = "You are definitely getting better today";
$tok = strtok($string, ' ');
while ($tok !== false) {
foreach ($patterns as $pattern) {
if (strpos($tok, $pattern) !== FALSE) {
$string = str_replace("$tok ", '', $string);
}
}
$tok = strtok(' ');
}
echo $string;
这是另一个正则表达式版本:
$string = "You are definitely getting better today";
$patterns = ["are", "finite", "get", "er"];
$regex = sprintf(
"#\w*(%s)\w*\h*#",
implode('|', array_map('preg_quote', $patterns))
);
echo preg_replace($regex, '', $string);
该模式与此页面上的其他模式基本相同,但它不会使删除空格成为额外的步骤,而是以单一模式代替:

关于您的评论:
请修改您的第二个代码,以便如果单词https://www.get.co在字符串中,则必须删除整个单词https://www.get.co
单词 ( \w) 始终与 ASCII 字符匹配[A-Za-z0-9_]。因此,它不会匹配正斜杠、点或冒号。您需要按如下方式扩展字符类:
"#[\w/:.]*(%s)[\w/:.]*\h*#"
根据性能:根据您的一些输入对其进行基准测试。