【发布时间】:2020-12-31 05:40:58
【问题描述】:
我有一个很长的名称列表,如果列表中的名称在字符串中的任何位置,我将使用 preg_replace 进行匹配。如果我在正则表达式中使用很少的名称对其进行测试,它可以正常工作,但考虑到我有超过 5000 个名称,它会给我错误“preg_replace():编译失败:正则表达式太大”。
不知何故,我无法弄清楚如何将正则表达式分成几部分,使其变得更小(如果可能的话)。
名称列表是从数据库动态创建的。 这是我的代码。
$query_gdpr_names = "select name FROM gdpr_names";
$result_gdpr_names = mysqli_query($connect, $query_gdpr_names);
while ($row_gdpr_names = mysqli_fetch_assoc($result_gdpr_names))
{
$AllNames .= '"/'.$row_gdpr_names['name'].'\b/ui",';
}
$AllNames = rtrim($AllNames, ',');
$AllNames = "[$AllNames]";
$search = preg_replace($AllNames, '****', $search);
创建的 $AllNames str 如下所示(仅在示例中 3 个名称)
$AllNames = ["/Lola/ui", "/Monica\b/ui", "/Chris\b/ui"];
还有测试字符串
$search = "I am Lola and my friend name is Chris";
非常感谢任何帮助。
【问题讨论】:
标签: php regex preg-replace