[英]Java string - get everything between (but not including) two regular expressions?
在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
您不应该使用正则表达式来解码XML - 如果输入没有严格控制,这最终会破坏。
最简单的事情可能是在DOM树中解析XML(Java 1.4和更新版本直接包含XML解析器),然后导航树以选择您需要的内容。
也许你想告诉你想用你的程序完成什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.