This question already has answers here:
How to validate an email address using a regular expression?
                                
                                    (73个答案)
                                
                        
                                3年前关闭。
            
                    
我今天正在尝试构建一个正则表达式,使其与电子邮件地址匹配。

我制作了一个,但在我想要的所有情况下都不起作用。

我要使用一个正则表达式来匹配所有以点号或仅以.com结尾的2个字符的电子邮件地址。

我希望足够清楚


[email protected]>应该可以工作
[email protected]>应该可以
[email protected]>应该可以
[email protected]>不起作用
aaaaaa @ bbbb。 ->不起作用


这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>

int main (void)
{
  int match;
  int err;
  regex_t preg;
  regmatch_t pmatch[5];
  size_t nmatch = 5;
  const char *str_request = "[email protected]";

  const char *str_regex = "[a-zA-Z0-9][a-zA-Z0-9_.]+@[a-zA-Z0-9_]+.[a-zA-Z0-9_.]+[a-zA-Z0-9]{2}";

  err = regcomp(&preg, str_regex, REG_EXTENDED);
  if (err == 0)
    {
      match = regexec(&preg, str_request, nmatch, pmatch, 0);
      nmatch = preg.re_nsub;
      regfree(&preg);
      if (match == 0)
    {
          printf ("match\n");
          int start = pmatch[0].rm_so;
          int end  = pmatch[0].rm_eo;
          printf("%d - %d\n", start, end);
    }
      else if (match == REG_NOMATCH)
    {
          printf("unmatch\n");
    }
}
  puts ("\nPress any key\n");
  getchar ();
  return (EXIT_SUCCESS);
 }

最佳答案

"[a-zA-Z0-9][a-zA-Z0-9_.]+@[a-zA-Z0-9_]+\\.(com|[a-zA-Z]{2})$"


https://regex101.com/是一个非常好的工具

\.表示垃圾点;

(|)表示替代方案;

$表示行的结尾,因为我们不希望比赛后有一些尾随的字符。

09-12 18:18