我无法使用Pattern.compile(正则表达式)解析多行XML消息有效负载。但是,如果我将相同的消息单行显示给它我预期的结果。例如,如果我解析
<Document> <RGOrdCust50K5s0F> AccName AccNo AccAddress </RGOrdCust50K50F> </Document>
它给了我RGOrdCust50K50F&gt;标记值为:AccName AccNo AccAddress 但如果我使用多行,如
<Document> <RGOrdCust50K50F>AccNo
AccName
AccAddress </RGOrdCust50K50F></Document>
通过ava.lang.IllegalStateException:找不到匹配项
我用来测试它的Testcase代码如下所示
public class ParseXMLMessage {
public static void main(String[] args) {
String fldName = "RGOrdCust50K50F";
String message="<?xml version=1.0 encoding=UTF-8?> <Document><RGOrdCust50K50F>1234
ABCD
LONDON,UK </RGOrdCust50K50F></Document>";
String fldValue = getTagValue(fldName, message);
System.out.println("fldValue:"+fldValue);
}
private static String getTagValue(String tagName, String message) {
String regex = "(?<=<" + tagName + ">).*?(?=</" + tagName + ">)";
System.out.println("regex:"+regex);
Pattern pattern = Pattern.compile(regex);
System.out.println("pattern:"+pattern);
Matcher matcher = pattern.matcher(message);
System.out.println("matcher:"+matcher);
matcher.find(0);
String tagValue = null;
try {
tagValue = matcher.group();
} catch (IllegalStateException isex) {
System.out.println("No Tag/Match found " + isex.getMessage());
}
return tagValue;
}
}
作为一项商业要求,我需要制作消息,但是当我发布消息时,我会得到例外。 我无法解决这个问题请注意,如果有任何问题,请注意&#39; REGEX&#39;表达我正在使用我是否需要使用&#39; / n&#39;在Regex表达解决这个问题。亲切协助
答案 0 :(得分:1)
如果要解析XML,请使用XML解析器来执行此操作 - 当您发现越来越多无法充分处理的情况时,您的REGEX将变得越来越复杂和脆弱。
有大量成熟稳定的XML处理库。我倾向于坚持我所知道的,jdom有一个非常浅的学习曲线,并且很容易处理这种处理。
答案 1 :(得分:0)
问题取决于'。'元字符。见http://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
. Any character (may or may not match line terminators)
尝试使用以下代码:
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE| Pattern.DOTALL);
请检查以下主题:java regex string matches and multiline delimited with new line