Java 正则表达式、匹配和查找

标签 java regex

我仍然无法理解 matches() 和 find() 的差异,这里是代码

final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
System.out.println("Found : " + subMatcher.find());

输出为

发现:true 发现:错误

我对匹配的理解并从中找到answer ,是 matches() 尝试匹配整个字符串,而 find() 仅尝试匹配下一个匹配子字符串,并且匹配器添加 ^ 和 $ 元字符来开始和开始,并且 find() 可以有不同的结果,如果我们多次使用它,但这里 123 仍然是一个子字符串,第二个输出应该是 true。如果我注释掉第二行,那么它确实将输出显示为 true

最佳答案

当您调用matches()时,Matcher已搜索匹配项(整个 String )。调用find Matcher将尝试在当前匹配之后再次查找该模式,但由于在匹配整个 String 的匹配之后没有留下任何字符。 , find返回false .

搜索String再次,您需要创建一个新的 Matcher或调用reset() :

final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
subMatcher.reset();
System.out.println("Found : " + subMatcher.find());

关于Java 正则表达式、匹配和查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38953016/

相关文章:

java - Netty动态Channelhandler管道

java - 考虑在您的配置中定义类型为 'org.o7planning.sbshoppingcart.service.UserDetailsServiceImpl' 的 bean

c# - Java 到 C# 的转换有什么问题?

regex - 正则表达式 - 禁止任何大小且仅重复包含一个字符的字符串

java - Hibernate 条件无法检索连接的值

java - 将 JTextArea 格式化为表格格式

java - Android GridView 项目在按下时更改图像并更改回来

php - 智能抓取第一段/起始文本

python - 将 4.7uF 替换为 4U7 的正则表达式

mysql - 如何从 mysql 中的字段中提取部分文本?