【发布时间】:2019-05-05 16:50:44
【问题描述】:
我看书或上网,结果说.\n通常等于\s\S或\d\D或\w\W,表示所有字符。但现在我想得到消息从某个字符串中,我发现我只能使用.\n。我的代码有什么问题?为什么我不能使用\s\S 表达式?
String srcMsg="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root><resultCode>00000</resultCode><resultDesc><![CDATA[00000:<ResponseClass Name=\"Response\">\n <ResponseSubClass Name=\"attributesResponse\">\n <ITEM>0</ITEM>\n </ResponseSubClass>\n</ResponseClass>]]></resultDesc></root>";
//The right code
java.util.regex.Pattern pP0 = java.util.regex.Pattern.compile(".*<!\\[CDATA\\[00000:((.|\n)*)\\]\\]>.*");
//wrong code1
//java.util.regex.Pattern pP0 = java.util.regex.Pattern.compile(".*<!\\[CDATA\\[00000:(\\s|\\S)*\\]\\]>.*");
//wrong code2
//java.util.regex.Pattern pP0 = java.util.regex.Pattern.compile(".*<!\\[CDATA\\[00000:[\\w|\\W]*\\]\\]>.*");
java.util.regex.Matcher mP0= pP0.matcher(srcMsg);
if(mP0.find())
para=mP0.group(1);
int dsi3 = para.indexOf("<ITEM>") + "<ITEM>".length();
int dsi4 = para.indexOf("</ITEM>");
System.out.println(Integer.valueOf(para.substring(dsi3, dsi4)));
【问题讨论】:
-
.dot 匹配除换行符之外的所有内容。[\S\s]是一个包含所有事物和所有事物的类,结果是它匹配所有字符。 -
你之前已经被指出过...你为什么忽略它? stackoverflow.com/questions/1732348/…
-
您真的不想尝试使用正则表达式对 X(HT)ML 进行一般解析。这就像试图使用钝头螺丝刀雕刻复杂的硬木卷轴一样。结果永远不会被接受,必须收拾烂摊子的开发人员将永远诅咒你的名字。帮自己一个忙,使用真正的解析器。
标签: java regex regex-group