Pattern p = Pattern.compile("(?<=<PACKAGE_NOTAMS>)\\w*(?=</PACKAGE_NOTAMS>)");
Matcher m = p.matcher(regEx);
while(m.find())
{
    System.out.println("匹配内容:"+m.group(0));
}
上面是我定义的一个正则表达式,目的是为了取出<PACKAGE_NOTAMS></PACKAGE_NOTAMS>之间的内容
下面是我的测试内容
<PACKAGE_NOTAMS>8xb4M9/2nWPsmvAcwu6eXDVWd+m3l6KxinAs3OmuaFluizrNHH2KM7iXG4KM47/TejnphH64t7</PACKAGE_NOTAMS>发现只有去掉其中的"/"和"+"才可以匹配,"w"不是可以表示任意字符吗,我这里的问题在哪里呢?

解决方案 »

  1.   


    Pattern p = Pattern.compile("(?<=<PACKAGE_NOTAMS>)(.*?)(?=</PACKAGE_NOTAMS>)");
      

  2.   

    Pattern p = Pattern.compile("(?<=<PACKAGE_NOTAMS>).*(?=</PACKAGE_NOTAMS>)"); 
    \\w只能匹配字母下划线数字,依据你的应用环境,它也可以匹配汉字
    .是匹配任意字符
      

  3.   

    \w 在Java中只匹配字母、数字、下划线
    . 可以匹配除换行符“\n”外的任意字符如果要匹配任意字符,用[\d\D]String test = "<PACKAGE_NOTAMS>8xb4M9/2nWPsmvAcwu6eXDVWd+m3l6KxinAs3OmuaFluizrNHH2KM7iXG4KM47/TejnphH64t7</PACKAGE_NOTAMS>";
    Pattern p = Pattern.compile("(?<=<PACKAGE_NOTAMS>)[\\s\\S]*?(?=</PACKAGE_NOTAMS>)"); 
    Matcher m = p.matcher(test); 
    while(m.find()) 

        System.out.println("匹配内容:"+m.group()); 
      

  4.   

    (?<=<PACKAGE_NOTAMS>)(.*?)(?=</PACKAGE_NOTAMS>)
    .*?匹配任意字符,如果没有,也会匹配出来,如果想匹配那种不为空的情况可以用.+?