php - 有效地从字符串中删除所有数组值,如果数组值是字符串中单词的一部分,则整个单词也必须从字符串中删除
问题描述
我有一个字符串数组
$array = array("are", "finite", "get", "er");
和一个字符串
$string = "You are definitely getting better today";
我期待这个输出
You today
我想有效地从字符串中删除所有数组值,如果数组值是字符串中单词的一部分,则整个单词也必须从字符串中删除。
这是我目前正在处理的代码
foreach ($array as $a)
{
$string = str_replace($a, "", $string);
}
echo $string;
它从字符串中删除数组值,但不会删除包含数组值的单词。
编辑:
由于我的字符串是用户提供的并且大约 4096 个字符长,请有人指导我哪个答案在速度和内存使用方面更有效。
解决方案
试试这个(正则表达式方法):
$patterns = ["are", "finite", "get", "er"];
$string = "You are definitely getting better today";
$re = '\w*('.implode('|', $patterns).')\w*';
$string = preg_replace('#'.$re.'#', '', $string);
$string = preg_replace('#\h{2,}#', ' ', $string);
echo $string;
推荐阅读
- flutter - 表单颤动上的可拖动滚动条
- python - Python2:str.encode() 和 unicode.decode() 做什么?
- cmake - Wix:如何创建超过 2GB 的 bundle.exe(外部文件)
- java - LinkedList 不能复制一些重复的数字
- angular - 有没有办法返回自定义字符串响应而不是 return next.handle(req); 在角拦截器中?
- reactjs - reactJs 中的映射函数
- bash - 使用 Bash 将值从一个文件映射到另一个文件
- vb.net - 将关键字(vbTab)作为参数传递 vb.net
- docusaurus - Docusaurus V2 - 在文档中使用 og:title 的页面标题
- javascript - 带跨度的禁用按钮仍会触发点击功能!角