有电子邮件模式:
^[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
。 / p>
请您解释有和没有^
和$
的正则表达式之间的区别吗?
如何强制匹配器使用包含^
和$
的正则表达式?
答案 0 :(得分:1)
^
和$
分别表示输入的开始和结束。地址周围的"NAME <...>"
会导致Matcher
忽略它可能找不到^
和$
的潜在匹配。
答案 1 :(得分:1)
^ & $
匹配String的开头和结尾(如果打开MultiLine开关,则为Line或Full文本)。如果需要从文本中提取电子邮件,可以从模式中修剪它们。
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