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


问题内容

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

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

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

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

Header text

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

谢谢!


问题答案:

编写这样的正则表达式:

"(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