"
\\w+@\\w+[.]\\w+
"和"^\\w+@\\w+[.]\\w+$
"有什么区别?我已经尝试在谷歌上搜索,但没有找到答案。"^
表示“匹配字符串的开头”(确切地说,是在字符串中第一个字符之前的位置,因此它不会匹配实际的字符)。
$
表示“匹配字符串的结尾”(即字符串中最后一个字符之后的位置)。
这两个符号都被称为锚点,可以确保匹配整个字符串而不仅仅是一个子字符串。
因此,在您的例子中,第一个正则表达式将匹配email@address.com.uk
,但匹配的文本将是email@address.com
,可能不是您预期的结果。而第二个正则表达式将会失败。
请注意,一些正则表达式实现会隐式地将正则表达式锚定在字符串的开头/结尾(例如 Java 的.matches()
,如果您使用它)。
如果设置了多行选项(使用(?m)
标记,或通过Pattern.compile("^\\w+@\\w+[.]\\w+$", Pattern.MULTILINE)
进行设置),则^
和$
也会匹配一行的开头和结尾。
^[\\w.]+@[\\w.]+\\.\\w+$
。它仍然不完美(没有任何正则表达式可以完全匹配电子邮件地址),但是它更加宽容一些。 - Tim Pietzcker.matches()
方法会隐式地为你的正则表达式添加锚点! - Tim Pietzcker试试 Javadoc:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
^
和$
匹配行的开头/结尾(但不会消耗它们)