这事一个类似于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 不就是匹配任意不是空白符的字符吗?为什么出不来呢?
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,字符串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);
"<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+)\" />");
也取不到……
+ " <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));
}
+ "<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);
}