最近在学Java,刚看到Java中的正则表达式,然后看到书中的一个例子不是太了解,想请教一下大家,先上代码吧!import java.util.regex.Matcher;
import java.util.regex.Pattern;public class FindGroup {
private static int count;
public static void main(String[] args){
Matcher m = Pattern.compile("\\w+").matcher("Java isn't easy!");
//Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!");
while(m.find()){
count++;
System.out.println(m.group());
}
System.out.println(count);
}
}该程序的打印结果是:
Java
isn
t
easy
4
我注释掉的那一句打印结果是:
Java
is
not
easy
4
问题就是我并不太明白为什么会输出这样的结果,首先我认为\w是匹配单个字符或者数字和下划线的,由于后面还有一个+号,所以可以匹配多个字符或者数字,当遇到第一个空格的时候就该停止匹配了,所以应该输出Java,但是后来看了一下发现\w书上的解释是匹配单词的,那么我想问如何匹配单词,匹配单词的时候空格没有影响吗,遇到什么才会停止匹配呢?希望知道的回答一下,先谢谢了。正则表达式java单词匹配
import java.util.regex.Pattern;public class FindGroup {
private static int count;
public static void main(String[] args){
Matcher m = Pattern.compile("\\w+").matcher("Java isn't easy!");
//Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!");
while(m.find()){
count++;
System.out.println(m.group());
}
System.out.println(count);
}
}该程序的打印结果是:
Java
isn
t
easy
4
我注释掉的那一句打印结果是:
Java
is
not
easy
4
问题就是我并不太明白为什么会输出这样的结果,首先我认为\w是匹配单个字符或者数字和下划线的,由于后面还有一个+号,所以可以匹配多个字符或者数字,当遇到第一个空格的时候就该停止匹配了,所以应该输出Java,但是后来看了一下发现\w书上的解释是匹配单词的,那么我想问如何匹配单词,匹配单词的时候空格没有影响吗,遇到什么才会停止匹配呢?希望知道的回答一下,先谢谢了。正则表达式java单词匹配
遇到空格就会断开
isn't '不会匹配\w
Java is very easy! 那来的not?
int nextSearchIndex = last;
if (nextSearchIndex == first)
nextSearchIndex++; // If next search starts before region, start it at region
if (nextSearchIndex < from)
nextSearchIndex = from; // If next search starts beyond region then it fails
if (nextSearchIndex > to) {
for (int i = 0; i < groups.length; i++)
groups[i] = -1;
return false;
}
return search(nextSearchIndex);
}
find 的源码 可以看出find只有找到该字符串的结尾才有return false
否则会一直往下找。