生成电子邮件地址正则表达式

时间:2016-04-14 12:47:19

标签: c regex

我今天正在尝试构建一个正则表达式,使其与电子邮件地址匹配。

我已经制作了一个,但没有在我想要的所有情况下工作。

我想要一个正则表达式匹配所有电子邮件地址,在点后只有2个字符或只有.com。

我希望明确表示,

  • aaaaaa@bbbb.uk - >应该工作
  • aaaaaa@bbbb.com - >应该工作
  • aaaaaa@bbbb.cc - >应该工作

  • aaaaaa@bbbb.ukk - >不应该工作

  • 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 = "1aaaak@aaaa.ukk";

  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);
 }

1 个答案:

答案 0 :(得分:0)

public void SendUserReport(String reportText){
    ACRA.getErrorReporter().putCustomData(USER_REPORT_CONTENT_TAG, reportText);
    ACRA.getErrorReporter().handleSilentException(new NotificationFromUserFakeException());
    ACRA.getErrorReporter().removeCustomData(USER_REPORT_CONTENT_TAG);
}

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

"[a-zA-Z0-9][a-zA-Z0-9_.]+@[a-zA-Z0-9_]+\\.(com|[a-zA-Z]{2})$" 表示一个小点;

\.意味着另类;

(|)表示该行的结尾,因为我们不希望匹配后有一些尾随字符。