修改我的正则表达式,使模式搜索不应区分大小写



我有下面的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;

我想要两个修改

  1. 模式搜索不应区分大小写,例如模式ER必须删除$string中的better
  2. 如果$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次,即使它成为可选的,这样整个模式在字符串的开头仍然可以匹配。

相关内容

最新更新