正则表达式的区别?

时间:2011-11-05 20:17:36

标签: php regex

我目前在我的php脚本中使用此正则表达式来验证电子邮件地址:

preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $string, $matches);

问题是,这个特定的正则表达式不可靠,经常会发现一些误报。

我正在寻找regexlib.com找到一个更好的,但我从该网站获得的所有内容似乎都找不到匹配。

例如:

 preg_match_all("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", $string, $matches);

什么也找不到,即使它应该根据regexlib工作。我已经在regexlib上尝试了前10个正则表达式用于电子邮件验证,但没有一个能够正常工作。我做错了吗?

链接到regexlib电子邮件类别:http://regexlib.com/DisplayPatterns.aspx?cattabindex=0&categoryId=1

谢谢,

2 个答案:

答案 0 :(得分:3)

您的第二个正则表达式失败,因为您需要在PHP中添加delimiters

"/([0-9a-zA-Z]...<snip>...[a-zA-Z]{2,9})/"
 ^                                      ^
 here                                here

(我还删除了^$,正如马里奥指出的那样。)

您可以尝试不同的方法:

  1. 使用非常简单的正则表达式查找看起来可能是电子邮件地址的任何内容。在这里允许误报是可以的,只要确保你不要错过任何一个。
  2. 对于您在上面找到的每个电子邮件地址候选人,请根据正确的电子邮件地址验证程序进行检查,以查看它是否确实是有效的电子邮件地址。使用此阶段消除误报。
  3. 相关

答案 1 :(得分:2)

三件事: