11

在 Java 中,是否有一种简单的方法可以通过在任一侧指定正则表达式分隔符来提取子字符串,而不在最终子字符串中包含分隔符?

例如,如果我有这样的字符串:

<row><column>Header text</column></row>

提取子字符串的最简单方法是什么:

Header text

请注意,子字符串可能包含换行符...

谢谢!

4

2 回答 2

24

像这样写一个正则表达式:

"(regex1)(.*)(regex2)"

...并从匹配器中拉出中间组(以处理要使用的模式中的换行符Pattern.DOTALL)。

使用您的示例,我们可以编写如下程序:

package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    public static void main(String[] args) {
        Pattern p = Pattern.compile(
                "<row><column>(.*)</column></row>",
                Pattern.DOTALL
            );

        Matcher matcher = p.matcher(
                "<row><column>Header\n\n\ntext</column></row>"
            );

        if(matcher.matches()){
            System.out.println(matcher.group(1));
        }
    }

}

运行时会打印出哪个:

Header


text
于 2009-06-07T15:47:43.397 回答
2

您不应该使用正则表达式来解码 XML - 如果输入不受严格控制,这最终会中断。

最简单的事情可能是在 DOM 树中解析 XML(Java 1.4 和更新版本直接包含 XML 解析器),然后导航树以挑选出您需要的内容。

也许你想告诉你想用你的程序完成什么?

于 2009-06-07T19:31:00.003 回答