Java字符串-获取(但不包括)两个正则表达式之间的所有内容?
在Java中,有没有一种简单的方法可以通过在任意一侧指定正则表达式分隔符来提取子字符串,而不在最后一个子字符串中包含分隔符 例如,如果我有这样一个字符串:Java字符串-获取(但不包括)两个正则表达式之间的所有内容?,java,regex,string,split,Java,Regex,String,Split,在Java中,有没有一种简单的方法可以通过在任意一侧指定正则表达式分隔符来提取子字符串,而不在最后一个子字符串中包含分隔符 例如,如果我有这样一个字符串: <row><column>Header text</column></row> "(regex1)(.*)(regex2)" 请注意,子字符串可能包含换行符 谢谢 像这样编写正则表达式: <row><column>Header text</column>&
<row><column>Header text</column></row>
"(regex1)(.*)(regex2)"
请注意,子字符串可能包含换行符
谢谢 像这样编写正则表达式:
<row><column>Header text</column></row>
"(regex1)(.*)(regex2)"
。。。并从匹配器中拉出中间组(以处理您想要使用的模式中的换行符)
根据您的示例,我们可以编写如下程序:
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));
}
}
}
您不应该使用正则表达式来解码XML—如果输入没有严格控制,这将最终中断 最简单的事情可能是在DOM树中解析XML(Java1.4和更新版本直接包含XML解析器),然后导航树以选择所需内容
也许你想告诉我你想用你的程序完成什么?@Adam。。。这只是因为我需要启动Eclipse来获得一个示例,并希望快速获得答案;)@亚伦:很公平。我不妨删除我的第一条评论:)回答得好。@Aaron-谢谢,你的例子很有用!但是,你能告诉我用什么正则表达式模式从这样的字符串中提取相同的文本吗?它包含一些单引号?Header\n\n\n我尝试过使用Pattern p=Pattern.compile((*),Pattern.DOTALL);同样,在引号前面加反斜杠,但都不起作用。对不起,我对正则表达式很陌生,谢谢你的帮助。再次感谢你!Annanana,这就是为什么使用适当的工具来解析XML更容易的原因:XML解析器。XML不是一种正则语言,所以不要试图用正则表达式来解析它。。快速提示:您可能需要使用
matcher.find()
而不是matches()
,以防正在搜索的字符串大于您感兴趣的位。+1一旦有了DOM树,就可以使用XPath提取所需的位。