最近在学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单词匹配

解决方案 »

  1.   

    \w 单词字符:[a-zA-Z_0-9] 
    遇到空格就会断开
    isn't  '不会匹配\w
    Java is very easy!  那来的not?
      

  2.   

    谢谢你,那个not打错了,应该是very,你说\w匹配单词字符,遇到空格就会断开,此时m.find()就应该为假了吧,为什么还继续匹配空格后面单词呢。
      

  3.   

    public boolean find() {
            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
    否则会一直往下找。