php - 修改我的正则表达式,以便模式搜索不区分大小写
问题描述
我有以下 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中更好地删除
- 如果$string中删除的单词前后有换行符,则只应删除一个换行符。
如果$string是
You are definitely getting
better
today
输出必须是
You definitely
today
问候,
解决方案
您可以使用
$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 演示。
虽然i
修饰符为正则表达式匹配提供了不区分大小写的功能,但这里另一个不太明显的事情是您需要添加一个可选的换行符模式。
该换行符可以通过多种方式匹配,但在 PHP PCRE 中,您可以轻松地将其与\R
构造匹配。
在它后面加上一个?
量词,你可以让它匹配 1 次或 0 次,即让它成为可选的,这样整个模式仍然可以匹配到字符串的开头。
推荐阅读
- android - Flutter 错误 - FileSystemException:创建失败,路径 = 'storage/emulated/0/myDir'(操作系统错误:不允许操作,errno = 1)
- google-sheets - 谷歌表:在查询输出中插入空白列
- asp.net-mvc - 渲染局部视图 ASP MVC
- scom - SCOM - Runas 帐户 WriteAction 不起作用
- swift - 如何在 UICollectionView 创建两个按水平排列的部分
- javascript - 将函数变量暴露给外部并在函数调用期间访问它们
- excel - 如何使用表格公式(或谷歌应用程序脚本)查找日期范围的多少天属于另一个日期范围?
- json - 根据来自 URL "[FLUTTER] " 的 JSON 值进行重定向
- c++11 - static_assert 抛出错误“静态断言的非常量条件”
- r - 如何在 rmarkdown 针织到 html 的数学模式下写粗体希腊字母?