我有以下php代码,可删除与模式匹配的整个单词
$patterns = ["re", "get", "ER"];
$string = "You are definitely getting better today";
$alternations = implode('|', $patterns);
$re = '(?!(?<=\s)(?:'.$alternations.')(?=\s))\S*(?:'.$alternations.')\S*';
$string = preg_replace('#'.$re.'#', '', $string);
$string = preg_replace('#\h{2,}#', ' ', $string);
echo $string;
我想要两个修改
如果 $ string 是
You are definitely getting
better
today
输出必须为
You definitely
today
此致
答案 0 :(得分:1)
您可以使用
$patterns = ["re", "get", "ER"];
$string = "You are definitely getting\nbetter\ntoday";
$alternations = implode('|', $patterns);
$re = '\R?(?!(?<=\s)(?:'.$alternations.')(?=\s))\S*(?:'.$alternations.')\S*';
$string = preg_replace('#'.$re.'#i', '', $string);
$string = preg_replace('#\h{2,}#', ' ', $string);
echo $string;
请参见PHP demo。
虽然i
修饰符对正则表达式匹配不区分大小写,但在这里,另一个不那么明显的事情是,您需要添加可选的换行模式。
该换行符可以通过多种方式进行匹配,但是在PHP PCRE中,您可以轻松地将其与\R
构造进行匹配。
在其后添加?
量词,可以使其匹配1或0次,即使其成为可选值,以便整个模式仍可以在字符串的开头进行匹配。