我正在尝试验证一堆文本并检查其中是否有任何电子邮件...所以我使用以下代码:
if (preg_match_all("/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/", $str, $matches)){
}
这适用于Page1
中的TEXT_A但是当我进入Page2并尝试再次检查TEXT_A时,它会在“问题加载页面”错误的情况下终止页面...
如果我删除此检查页面将加载正常...我不明白为什么会发生这种情况......
编辑:即时通讯使用CodeIgniter
答案 0 :(得分:1)
我发现您的正则表达式中存在可能导致Catastrophic Backtracking的问题。
^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+
^^^^^^^^^^^^^^^^^^^^^^
您想在我标记的区域内匹配什么?
正则表达式应该如何知道第二组中的哪一封信应该适用?
如果你有更长的字母序列可以匹配,正则表达式将需要很多步骤来匹配 ==>你有性能问题,正则表达不能及时完成!
我会说你可以删除最后一组,正则表达式会匹配相同但更快。
^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+