【发布时间】:2020-01-11 13:34:13
【问题描述】:
"\\w+@\\w+[.]\\w+" 和 "^\\w+@\\w+[.]\\w+$" 有什么区别?我试过用谷歌搜索它,但没有运气。
【问题讨论】:
"\\w+@\\w+[.]\\w+" 和 "^\\w+@\\w+[.]\\w+$" 有什么区别?我试过用谷歌搜索它,但没有运气。
【问题讨论】:
^ 表示“匹配字符串的开头”(更准确地说,是字符串中第一个字符之前的位置,因此它与实际字符不匹配)。
$ 表示“匹配字符串的结尾”(字符串中最后一个字符之后的位置)。
两者都称为anchors,并确保匹配整个字符串而不仅仅是子字符串。
因此,在您的示例中,第一个正则表达式将在 email@address.com.uk 上报告匹配,但匹配的文本将是 email@address.com,可能不是您所期望的。第二个正则表达式将失败。
小心,因为一些正则表达式实现隐式地将正则表达式锚定在字符串的开头/结尾(例如 Java 的 .matches(),如果您正在使用它)。
如果设置了多行选项(例如,使用(?m) 标志,或者通过执行Pattern.compile("^\\w+@\\w+[.]\\w+$", Pattern.MULTILINE)),那么^ 和$ 也会匹配行的开头和结尾。
【讨论】:
^[\\w.]+@[\\w.]+\\.\\w+$。它仍然不完美(没有任何正则表达式可以匹配电子邮件地址),但它更宽容一些。
.matches() 为您的正则表达式隐式添加锚点!
试试 Javadoc:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
^ 和 $ 匹配一行的开头/结尾(不消耗它们)
【讨论】: