"\w+@\w+[.]\w+""^\w+@\w+[.]\w+$"有什么区别?我曾尝试用Google搜索它,但是没有运气。

#1 楼

^的意思是“匹配字符串的开头”(更确切地说,是字符串中第一个字符之前的位置,因此它与实际字符不匹配)。

$的意思是“匹配字符串的结尾”字符串”(字符串中最后一个字符之后的位置)。

两者都称为锚,并确保整个字符串匹配,而不仅仅是子字符串。

所以在在您的示例中,第一个正则表达式将在email@address.com.uk上报告匹配项,但是匹配的文本将是email@address.com,可能不是您期望的。第二个正则表达式将完全失败。

注意,因为某些正则表达式实现将正则表达式隐式地锚定在字符串的开头/结尾(例如,如果使用Java,则为.matches())。 />
如果设置了多行选项(例如,使用(?m)标志或通过执行Pattern.compile("^\w+@\w+[.]\w+$", Pattern.MULTILINE)),则^$也将在行的开头和结尾匹配。

评论


因此,如果我理解正确,则字符串“ email@address.com.uk”与“ \\ w + @ \\ w + [。] \\ w +”完美匹配,但与“ ^ \\ w + @ \ w + [。]完美匹配。 \\ w + $”?但是我已经在Java中进行了测试,两种情况下字符串均失败。我仍然看不出明显的区别。可以根据我的情况显示要点吗?

–ipkiss
2011年8月2日在8:25

您的正则表达式在@符号后仅允许一个点。尝试^ [\\ w。] + @ [\\ w。] + \\。\\ w + $。它仍然不是完美的(没有正则表达式会匹配电子邮件地址),但是它有点宽容。

–蒂姆·皮茨克(Tim Pietzcker)
2011年8月2日,9:13



是的,根据您的答案,字符串“ email@address.com.uk”将与“ \\ w + @ \\ w + [。] \\ w +”匹配,但不会与“ ^ \\ w + @ \ w +”匹配[。] \\ w + $”。这段代码:String s =“ email@address.com.uk”; System.out.println(s.matches(“ \\ w + @ \\ w + [。] \\ w +”)); =>错误

–ipkiss
2011年8月2日,9:22

您是否彻底阅读了我的答案? Java的.matches()将锚点隐式地添加到您的正则表达式中!

–蒂姆·皮茨克(Tim Pietzcker)
2011年8月2日在10:51

#2 楼

试用Javadoc:

http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

^$匹配一行的开头/结尾(不消耗它们)