我需要在php中使用preg_replace()
来删除除了$querys
数组中的字符串之外的所有字符串。
此外,不包含白名单单词的元素应被删除。
在字符串中:
$text = [
0 => 'Tomada de Preços nº 003/2019',
1 => 'PREGÃO ELETRÔNICO Nº 001/2019',
2 => 'Processo Nº 011/2019',
3 => 'Aviso de Licitação CONCORRÊNCIA PÚBLICA Nº 3/2019',
);
$querys = [
'CONCORRÊNCIA',
'Tomada de Preços',
'PREGÃO ELETRÔNICO'
];
$result = [
0 => 'Tomada de Preços',
1 => 'PREGÃO ELETRÔNICO',
3 => 'CONCORRÊNCIA PÚBLICA',
];
2条答案
按热度按时间t5zmwmid1#
最直接地说,这是
preg_filter()
的一个很好的用例,假设您只期望为每个元素找到一个匹配。(Demo)更详细的解决方案是循环
preg_match()
或preg_replace()
调用,并有条件地推入结果数组。如果你的输入可能包含regex中有特殊含义的字符,你需要在内爆之前对这些值调用
preg_quote()
。(*SKIP)(*FAIL)
技巧有效地避免了删除白名单中的子字符串。其他所有内容都通过.*?
匹配被咀嚼和吐出。代码:(Demo)
或:(Demo)
输出:
xqkwcwgp2#
我的猜测是,也许一些简单的表达式,如以下可能是确定的研究:
测试
输出
如果您希望简化/修改/探索表达式,在regex101.com的右上角面板中有解释。如果你愿意,你也可以在this link中观察它是如何与一些样本输入匹配的。