使用Java测试正则表达式

17

我正在学习正则表达式,并且使用以下代码片段进行测试:

String regex = "";
String test = "";
Pattern.compile(regex).matcher(test).find();

但是当我尝试像这样做时:

System.out.println(Pattern.compile("h{2,4}").matcher("hhhhh").find()); 

它返回了true而不是预期的false。

或者

System.out.println(Pattern.compile("h{2}").matcher("hhh").find());

它返回了 true,而不是预期的 false。

问题出在哪里?也许这不是正确的语句来正确测试正则表达式?

谢谢。

3个回答

20

字符串hhh中包含两个h,因此正则表达式匹配成功,因为find()方法允许匹配子字符串。

如果你锚定正则表达式以强制其匹配整个字符串,则正则表达式将失败:

^h{2}$

另一个可能的方法是使用 matches() 方法:

"hhh".matches("h{2}")

将会失败。


啊,我应该只是在你的问题下面留言谈论匹配,而不是写自己的。 - Adam Gent

1

但这不会返回true

System.out.println(Pattern.compile("^h{2,4}$").matcher("hhhhh").find()); 

^ 是行的开头

$ 是行的结尾


0

你应该使用.matches()而不是.find()。同时,像@Tim所说的那样锚定它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接