解析一行以获得所需内容

时间:2011-11-11 22:34:33

标签: java regex

<lst name="responseHeader"><int name="status">0</int><int name="T">2</int><lst name="params"><str name="echoParams">all</str><str name="Params">all</str>solrpingquery<str name="ty">standard</str></lst></lst><str name="status">OK</str>

以上是我要解析的行,我想从上面的行中提取确定。从下面的特定字符串中我想提取确定确定可以是任何内容,并非强制要求状态确定

<str name="status">OK</str>

快速的方法是什么。

2 个答案:

答案 0 :(得分:1)

看起来像有效的XML,所以我建议使用一个XML解析器(很难说哪一个,因为你没有说你正在使用哪种语言)。

正则表达式看起来像

<str name="status">(.*?)</str>

<str name="status">([^<>]*)</str>

但您仍然需要指定您正在使用的语言,因此我可以根据需要调整正则表达式。尝试匹配(X)ML与正则表达式有几个问题,因此它可能并不总是按预期工作。只要标签之间只有普通文本,就应该没问题。

在Java中:

Pattern regex = Pattern.compile("<str name=\"status\">(.*?)</str>");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group(1);
} 

答案 1 :(得分:0)

我不得不承认,当它是矫枉过正时我是反XML和反正则表达式。 <怎么样

static final String SEARCH_STRING = "<str name=\"status\">";

然后,某处

int idx1 = theString.indexOf(SEARCH_STRING );
int idx2 = theString.indexOf("<", idx1+1 );
// verify that both are >= 0;
String result = theString.substring(idx1 +SEARCH_STRING.length(), idx2);

注意 - 我很确定该代码中某处有一个off-1错误,所以请检查它。