1

有电子邮件模式:

^[a-zA-Z0-9][\w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z.]*[a-zA-Z]$

以及尝试从字符串获取电子邮件的示例代码:

String email = "NAME <firstname_lastname@domain.com>";

Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);

if (matcher.find()) {
    System.out.println(matcher.group());
}

当 regexp 包含^$字符时,matcher.find()返回 false,但是当 regexp 没有这些字符时,一切都很好:我firstname_lastname@domain.com在控制台中看到。

您能否解释一下带和不带^and的正则表达式之间的区别$

如何强制 Matcher 使用包含^and的正则表达式$

4

2 回答 2

1

^ & $匹配字符串的开头和结尾(如果多行开关打开,则为行或全文)。如果您需要从文本中提取电子邮件,您可以从模式中修剪它们。

    String EMAIL_PATTERN = "^[a-zA-Z0-9][\\w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z.]*[a-zA-Z]$";
    String email = "NAME <firstname_lastname@domain.com>";
    Pattern pattern = Pattern.compile(EMAIL_PATTERN.substring(1, EMAIL_PATTERN.length()-1));
    Matcher matcher = pattern.matcher(email);

    if (matcher.find()) {
        System.out.println(matcher.group());
    }

输出

firstname_lastname@domain.com
于 2013-09-06T09:43:20.530 回答
1

^分别$表示输入的开始和结束。地址周围"NAME <...>"导致Matcher忽略它可能发现它不是用于^and的潜在匹配$

于 2013-09-06T08:40:52.213 回答