Java ^和$在正则表达式中是什么意思?
Java ^和$在正则表达式中是什么意思?,java,regex,Java,Regex,“\\w+@\\w+[.]\\w+”和“^\\w+@\\w+[.]\\w+$”之间有什么区别?我试过用谷歌搜索,但没有成功。试试Javadoc: ^和$匹配行的开头/结尾(不使用它们)^表示“匹配字符串的开头”(更确切地说,是字符串中第一个字符之前的位置,因此它与实际字符不匹配) $表示“匹配字符串末尾”(字符串中最后一个字符后的位置) 两者都被调用,并确保匹配整个字符串,而不仅仅是一个子字符串 因此,在您的示例中,第一个正则表达式将在email@address.com.uk,但匹配的文本将为
“\\w+@\\w+[.]\\w+”
和“^\\w+@\\w+[.]\\w+$”
之间有什么区别?我试过用谷歌搜索,但没有成功。试试Javadoc:
^
和$
匹配行的开头/结尾(不使用它们)^
表示“匹配字符串的开头”(更确切地说,是字符串中第一个字符之前的位置,因此它与实际字符不匹配)
$
表示“匹配字符串末尾”(字符串中最后一个字符后的位置)
两者都被调用,并确保匹配整个字符串,而不仅仅是一个子字符串
因此,在您的示例中,第一个正则表达式将在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测试过,字符串在两种情况下都失败了。我仍然看不到明显的区别。你能根据我的情况显示点吗?你的正则表达式只允许@符号后有一个点。试试^[\\w.]+@[\\w.]+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(没有任何正则表达式可用于匹配电子邮件地址),但它更为宽容。是的,根据您的回答,字符串“email@address.com.uk将与“\\w+@\\w+[.]\\w+”匹配,但与“^\\w+@\\w+[.]\\w+$”不匹配。此代码:字符串s=”email@address.com.uk“System.out.println(s.matches(\\w+@\\w+[.]\\w+”)=>错误您是否彻底阅读了我的答案?Java的.matches()
隐式地将锚添加到您的正则表达式中!