"\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)
),则^
和$
也将在行的开头和结尾匹配。#2 楼
试用Javadoc:http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
^
和$
匹配一行的开头/结尾(不消耗它们)
评论
因此,如果我理解正确,则字符串“ 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