【问题标题】:Regular Expression for domain from email address来自电子邮件地址的域的正则表达式
【发布时间】:2010-12-02 01:08:52
【问题描述】:

谁能帮我一个正则表达式,它会在@符号之后返回电子邮件地址的结尾部分?我是 regex 的新手,但想学习如何使用它而不是编写低效的 .Net 字符串函数!

例如对于“test@example.com”的输入,我需要“example.com”的输出。

干杯! 蒂姆

【问题讨论】:

    标签: .net regex email-address


    【解决方案1】:

    另一个较短的例子是 @([\w.-]+)\.

    https://regex101.com/r/gmOH52/2

    【讨论】:

      【解决方案2】:
      (@)(\w+\-|\w+)+(\.)
      

      我不是专家,但以上表达式是您从电子邮件中获取域所需要的,至少据我所知。

      问题正如指出的那样,您不仅要抓住域,还要抓住“@”和“.”。要访问正则表达式中的域名,请使用“$2”并保留“@”和“.”,您可以使用如下表达式:

      $1newdomain$3
      

      http://www.regexr.com/

      上面的网站是尝试正则表达式的好地方,看看它是如何工作的。

      【讨论】:

        【解决方案3】:

        哇,这里的所有答案都不完全正确。

        一个电子邮件地址可以有任意多个“@”,而最后一个不一定是域之前的那个:(

        例如,这是一个有效的电子邮件地址:

        user@example.com(i'm a comment (with an @))
        

        不过,您必须非常刻薄才能将其设为您的电子邮件地址。

        首先,解析出最后的所有 cmets。

        然后

        int atIndex = emailAddress.LastIndexOf("@");
        String domainPart = emailAddress.Substring(atIndex + 1);
        

        【讨论】:

          【解决方案4】:

          试试这个正则表达式:

          (?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4})
          

          【讨论】:

          • (?
          【解决方案5】:
          $input=hardiksondagar@gmail.com;
          // now you want to fetch gmail from input user PHP's inbuilt function 
          preg_match('/@(.*)/', $input, $output);
          echo $output[1]; // it'll print "gmail.com"
          
          • 函数文档:preg_match()

          【讨论】:

          • 该链接与此处发布的问题完全无关不要像这样简单地链接到您的网站,否则您会发现您的帖子被作为垃圾邮件删除。我正在为你删除链接。
          • 我知道这与问题无关,但链接包含非常棘手的示例,所以认为它对其他人有用......好吧,下次我会处理它。谢谢:-)
          【解决方案6】:

          这是一个通用的电子邮件匹配器:

          [a-zA-Z][\w\.-]*[a-zA-Z0-9]@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])
          

          注意,它只捕获域组;如果您使用以下内容,您还可以捕获@ 之前的部分:

          ([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])
          

          我不确定这是否符合 RFC 2822,但我对此表示怀疑。

          【讨论】:

            【解决方案7】:

            正则表达式是用于此目的的非常繁重的机器。只需在 @ 字符处拆分包含电子邮件地址的字符串,然后取后半部分。 (保证一个电子邮件地址只包含一个@ 字符。)

            【讨论】:

            【解决方案8】:

            您输入的简单正则表达式是:

            ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
            

            但是,当您申请一个广泛且异构的域时,它可能无用。

            一个例子是:

            ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)$
            

            但是,您可以根据需要优化该后缀域。

            但是对于您的后缀需求,您只需要:

            @.+$

            资源: http://www.regular-expressions.info/email.html

            【讨论】:

            • 我推荐这个解决方案,因为它限制较少。
            • 只是不要忘记将域捕获到一个组中,如要求:^[A-Z0-9._%+-]+@([A-Z0-9.-]+\.[A-Z]{2,4})$
            • 而且,呃,不要忘记转义那些 '.',即使在字符类中也是如此。
            【解决方案9】:

            @(.*)$

            这将与@匹配,然后捕获所有内容,直到输入结束 ($)

            【讨论】:

            • 谢谢!我收到“@example.com”。我可以在没有@的情况下获得价值吗?
            • 您可能没有找到正确的组。括号() 表示组匹配,因此请确保从索引为 1 而不是 0 的组中获取结果(因为索引 #0 始终为整个表达式匹配保留)。
            • 这是正确的答案,因为 OP 专门要求使用正则表达式...顺便说一句,这正是我到达这里时所寻找的 :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-26
            • 2011-05-20
            相关资源
            最近更新 更多