Java字符串 - 获取(但不包括)两个正则表达式之间的所有内容?

时间:2009-06-07 15:41:04

标签: java regex string split

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

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

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

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

Header text

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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

你不应该使用正则表达式来解码XML - 如果没有严格控制输入,这最终会破坏。

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

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