php preg match数组,如何在php中执行模式为数组的preg_match?

首先,如果你每分钟只做几十次,那么在这种情况下我不会非常担心性能.这些匹配非常快,我不认为你会通过遍历模式数组并单独调用preg_match来解决性能问题,如下所示:

$matches = false;

foreach ($pattern_array as $pattern)

{

if (preg_match($pattern, $page))

{

$matches = true;

}

}

您确实可以像使用某些人建议的那样使用或运算符将所有模式组合成一个模式,但不要只是将它们与|一起打击.如果您的任何模式包含or运算符,这将严重破坏.

我建议至少使用括号分组你的模式,如:

foreach ($patterns as $pattern)

{

$grouped_patterns[] = "(" . $pattern . ")";

}

$master_pattern = implode($grouped_patterns, "|");

但是……我不确定这最终是否会更快.无论是preg_match还是PHP,都必须循环它们.如果我不得不猜测我猜单个匹配将接近快速且更容易阅读和维护.

最后,如果你正在寻找性能,我认为最重要的是将非正则表达式匹配转换为简单的“字符串包含”检查.我想你的一些支票必须是简单的字符串检查,比如查看页面上是否有“此网站已关闭”.

这样做:

foreach ($strings_to_match as $string_to_match)

{

if (strpos($page, $string_to_match) !== false))

{

// etc.

break;

}

}

foreach ($pattern_array as $pattern)

{

if (preg_match($pattern, $page))

{

// etc.

break;

}

}

避免尽可能多的preg_match()可能是你最好的收获. strpos()比preg_match()快很多.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值