用perl怎么匹配一个字符串是否是合法的email地址



QUOTE:
原帖由 chjcpu1 于 2008-9-10 12:08 发表
RT, 哪位大侠最好给个好用的, 我要在C语言里调用, 或者C的也可以, 最近很菜, 先多谢了

检查邮件地址是否有效的唯一方式是你给它发个邮件,等着看有没有回复。若有了肯定有效;若没有也不能说明它无效。


QUOTE:
原帖由 MMMIX 于 2008-9-10 18:01 发表

检查邮件地址是否有效的唯一方式是你给它发个邮件,等着看有没有回复。若有了肯定有效;若没有也不能说明它无效。

不明白你是怎么做到腰缠万贯的
Data::Validate::Email这个模块你看可以么?
我就喜欢瞎用模块,因为我觉得出了模块的人考虑的比我周全
下面文字引自《PERL编程24学时教程》第22学时


  也许你已经发现C G I程序并不试图确定用户输入的电子邮件地址是否有效。它这样做是很有理由的,因为它无法确定该地址是否有效。
  这个原因一定会使你大吃一惊。
  标准的解决办法是设法清除掉显然无效的地址,无法确定是否有效的地址则属例外。电子邮件地址的I n t e r n e t标准( R F C - 8 2 2)有一个标准电子邮件地址的模板。但是,有些符合R F C - 8 2 2标准的有效地址实际上是无效的,而有些不符合R F C - 8 2 2标准的地址却是有效的、可以传递邮件的地址。
  编写对电子邮件地址进行匹配的正则表达式是不行的。例如,表达式/ ^ [ \ w. - ] + \ @ ( [ \ w, -] \ . ) + \ w + $ /看上去是可行的,它甚至与m e @ s o m e w h e r e . c o m这个地址相匹配。但是,它拒绝下面这个完全有效的电子邮件地址:
    *@qz.az
    clintp!sol2!westwood@dec.net
    realy%me@host.com
    "barney&fred"@flintstones.net
  与符合R F C - 8 2 2标准的电子邮件地址相匹配的一个正则表达式长达4 7 0 0个字符,因为太长,所以本书没有将它列出,你也很难键入。同时它也无法与I n t e r n e t上的每个传输邮件的地址相匹配。
  那么究竟怎么办呢?
  若要确定电子邮件地址是否有效,唯一的办法是将一个邮件发送到该地址,然后等待对方的答复。如果由于某个原因,你希望确保对方地址上有人(比如将来将邮件发送给他,因为他要求发送),请发送一个电子邮件,要求他回答。当对方的答复返回时,就知道你发送了一份有效的电子邮件。


我的E文不好,没法看懂最新文档,不过我认为该书的描述现在依然有效。
看来要掌握度