Java与javascript正则表达式匹配

当我做一个简单的测试时,我正在刷java中的正则表达式

Pattern.matches("q", "Iraq"); //false "Iraq".matches("q"); //false 

但在javascript中

 /q/.test("Iraq"); //true "Iraq".match("q"); //["q"] (which is truthy) 

这里发生了什么? 我可以使我的java正则表达式模式“q”表现与javascript相同吗?

在JavaScript match返回匹配使用的正则表达式的子字符串。 在Java matches检查整个字符串是否与正则表达式匹配。

如果要查找与正则表达式匹配的子字符串,请使用Pattern和Matcher类

 Pattern p = Pattern.compile(regex); Matcher m = p.matcher(yourData); while(m.find()){ m.group();//this will return current match in each iteration //you can also use other groups here using their indexes m.group(2); //or names (?...) m.group("groupName"); } 

这是因为在Java Pattern#matches OR String#matches期望您匹配完整的输入字符串而不仅仅是它的一部分。

另一方面,Javascript的String#match可以部分匹配输入,正如您在示例中看到的那样。

在Java中,如果整个输入字符串与给定模式匹配,则Pattern.matches返回true。 这相当于说,在你的例子中,“iraq”应匹配“^ q $”,这显然不是。

这是来自Java的Pattern Javadoc:

public boolean matches()

尝试将整个区域与模式匹配。 如果匹配成功,则可以通过start,end和group方法获得更多信息。

返回:当且仅当整个区域序列与此匹配器的模式匹配时才返回true

如果只想测试字符串的一部分,请在正则表达式的开头和结尾添加.* ,例如Pattern.match("iraq", ".*q.*")