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

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

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

Header text 

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

 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( "(.*)", Pattern.DOTALL ); Matcher matcher = p.matcher( "Header\n\n\ntext" ); if(matcher.matches()){ System.out.println(matcher.group(1)); } } } 

哪个在运行时打印出来:

 Header text 

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

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

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