PHP正则表达式 - 无法理解

时间:2011-08-12 14:31:32

标签: php regex

我正在尝试创建3个PHP正则表达式,它们可以做三件事。

  1. 获取电子邮件,例如mr.jones@apple-land.com
  2. 获取日期,例如31/05/90或31-Jun-90
  3. 获取名称服务器,例如ns1.apple.co.uk
  4. 我有大量的文字,想要从中提取这些东西。

    到目前为止我所拥有的是:

        $regexp = '/[A-Za-z0-9\.]+[@]{1}[A-Za-z0-9\.]+[A-Za-z]{2,4}/i';
    preg_match_all($regexp, $output, $email);
    
    $regexp = '/[A-Za-z0-9\.]+[^@]{1}/i';
    preg_match_all($regexp, $output, $nameservers);
    
    $regexp = '/[0-9]{2,4}[-\/]{1}([A-Za-z]{3}|[0-9]{2})[-\/]{1}[0-9]{2,4}/i';
    preg_match_all($regexp, $output, $dates);
    

    日期和电子邮件有效,但我不知道这是否是一种有效的方式..

    名字服务员根本不工作..基本上我想找到字母和数字的任意组合,其间有点而不是@符号..

    非常感谢任何帮助。

    由于

4 个答案:

答案 0 :(得分:2)

电子邮件的RegEx相当复杂。这是一个框架闪耀的地方。大多数流行的都有验证组件,您可以使用它们来解决这些问题。我最熟悉ZendFramework validationSymfony2CakePHP也提供了很好的解决方案。这些解决方案通常都写入适当的RFC规范,并包含对程序员经常忽略的事情的支持,例如+在电子邮件地址中有效的事实。它们还可以防止程序员犯下的常见错误。目前,您的电子邮件正则表达式将允许使用如下所示的电子邮件地址:.@.qt,该邮件地址无效。

有些人可能会争辩说,使用框架来验证电子邮件或主机名(也可能包含-)是过度的。我觉得这很值得。

答案 1 :(得分:0)

对于名称服务器,我建议使用:/[^.](\.[a-z_\d]+){3,}/i

答案 2 :(得分:0)

  

基本上我想找到任何字母和数字的组合   它们之间有点而不是@符号..

regexp用于查找中间有点的所有字母和数字:

$regexp '/[A-Za-z0-9]{1,}(\.[A-Za-z0-9]{1,}){1,}/i'

请注意,如果您所匹配的内容不包含@,则您不必明确表示您不想要“@”。

答案 3 :(得分:0)

我建议您为示例使用不同的模式:

  • [\w\.-]+@\w+\.[a-zA-Z]{2,4}发送电子邮件。
  • \d{1,2}[/-][\da-zA-Z]{1,3}[/-]\d{2,4}约会。
  • ([a-zA-Z\d]+\.){2,3}[a-zA-Z\d]+用于命名空间。
祝你好运;)