我有下面的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;
我想要两个修改
- 模式搜索不应区分大小写,例如模式ER必须删除$string中的better
- 如果$string中被删除的单词前后有换行符,则只应删除一个换行符
如果$string是
You are definitely getting
better
today
输出必须是
You definitely
today
示例PHP代码
问候,
您可以使用
$patterns = ["re", "get", "ER"];
$string = "You are definitely gettingnbetterntoday";
$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演示。
虽然i
修饰符对正则表达式匹配提供了不区分大小写的特性,但这里另一件不太明显的事情是,您需要添加可选换行模式。
这个换行符可以通过各种方式进行匹配,但在PHPPCRE中,您可以很容易地将其与R
构造进行匹配。
在它后面添加一个?
量词,可以使它匹配1或0次,即使它成为可选的,这样整个模式在字符串的开头仍然可以匹配。