这事一个类似于XML的字符串,我想通过正则表达式获得JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR字符串值
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringIndexTest
{
public static void main(String[] str)
{
 String wsNotamInfo="<PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>";
          String reval="";
 Pattern p = Pattern.compile("PDFPACKAGE_NOTAMS=\"(\\S+)\" />");
          Matcher m = p.matcher(wsNotamInfo);
         while (m.find()){
         reval=m.group(1);        
        }

System.out.println(reval);
}
}结果什么都输不出来 ,请帮我看看我的正则表达式有什么问题?\S 不就是匹配任意不是空白符的字符吗?为什么出不来呢?

解决方案 »

  1.   

    楼主的思想是正确的,但是有下边2个问题:
    1,字符串wsNotamInfo明显含有一个空格。
    String wsNotamInfo=" <PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR </PDFPACKAGE_NOTAMS>"; 2,Pattern p要表达的意思和字符串的模式不一样。Pattern p = Pattern.compile("PDFPACKAGE_NOTAMS=\"(\\S+)\" />"); 
    正确的代码应该是 String wsNotamInfo = " <PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>";
    String reval = "";
    Pattern p = Pattern.compile("<PDFPACKAGE_NOTAMS>(\\S+)</PDFPACKAGE_NOTAMS>");
    Matcher m = p.matcher(wsNotamInfo);
    while (m.find()) {
    reval = m.group(1);
    } System.out.println(reval);
      

  2.   

    哦,我还有一个问题,如果字符串形势为
    "<PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>" +
    "<PDFPACKAGE_NOTAMS>NjU4DQovR</PDFPACKAGE_NOTAMS>" +
    "<PDFPACKAGE_NOTAMS>/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>" +
    "<PDFPACKAGE_NOTAMS>xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>"我想获得每一个<PDFPACKAGE_NOTAMS></PDFPACKAGE_NOTAMS>怎么写呢?使用这个表达式
    Pattern p = Pattern.compile("PDFPACKAGE_NOTAMS=\"(\\S+)\" />"); 
    也取不到……
      

  3.   

    这样就可以 String wsNotamInfo = " <PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR </PDFPACKAGE_NOTAMS>"
    + " <PDFPACKAGE_NOTAMS>NjU4DQovR </PDFPACKAGE_NOTAMS>"
    + " <PDFPACKAGE_NOTAMS>/8A4Qbx7nwGfBnjM/NjU4DQovR </PDFPACKAGE_NOTAMS>"
    + " <PDFPACKAGE_NOTAMS>xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR </PDFPACKAGE_NOTAMS>";

    // .+? 代表匹配任意字符一次或多次,使用的是非贪婪数量词(Reluctant )
    Pattern p = Pattern
    .compile("<PDFPACKAGE_NOTAMS>(.+?)</PDFPACKAGE_NOTAMS>");
    Matcher m = p.matcher(wsNotamInfo);
    while (m.find()) {
    System.out.println(m.group(1));
    }
      

  4.   

    String wsNotamInfo = "<PDFPACKAGE_NOTAMS>JVBERi0xLjMNCjEgMCBvYmoNCjw8IA0KL0xlbmd0aCAy/xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>"
    + "<PDFPACKAGE_NOTAMS>NjU4DQovR</PDFPACKAGE_NOTAMS>"
    + "<PDFPACKAGE_NOTAMS>/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>"
    + "<PDFPACKAGE_NOTAMS>xZf8At/8A4Qbx7nwGfBnjM/NjU4DQovR</PDFPACKAGE_NOTAMS>";
    Pattern p = Pattern
    .compile("<PDFPACKAGE_NOTAMS>([^<]+)</PDFPACKAGE_NOTAMS>");
    Matcher matcher = null;
    int end = 0;
    while ((matcher = p.matcher(wsNotamInfo)) != null) {
    if (!matcher.find()) break;
    System.out.println(matcher.group(1));
    end = matcher.end();
    wsNotamInfo = wsNotamInfo.substring(end);
    }