String s="iraq ";
String regex="\\w*(?!u)";
Matcher m=Pattern.compile(regex).matcher(s);
while(m.find()){
System.out.print(m.group()+"*");
}
                //result iraq*** 为什么是这个?请详解,谢谢。

解决方案 »

  1.   

    你要知道?! 零宽断言,表示空隙后面不允许出现的字符,它匹配的是空隙,并不匹配任意一个字符。
    String s="iraq ";
    String regex="\\w*(?!u)";
    你要看清楚字符串是:iraq空格\w*首先匹配0到任意个单词字符,因为是贪婪的,所以匹配到 iraq这你按照你的打印 所以输出 iraq*接着匹配一个空隙,也就是空格前的空隙 ,打印一个*然后再匹配空格后面的一个空隙,再打印一个*所以输出的就是 :iraq*** 
    你可以把你的输出语句修改一下System.out.println(m.group()+"*");//加个换行,看的比较清楚一些
      

  2.   

    给你补个零宽断言:零宽断言   (?=exp)   匹配exp前面的位置
                    (?<=exp)  匹配exp后面的位置
                    (?!exp)  匹配后面跟的不是exp的位置
                    (?<!exp)  匹配前面不是exp的位置