【发布时间】:2009-06-07 15:41:03
【问题描述】:
在 Java 中,是否有一种简单的方法来提取子字符串,方法是在任一侧指定正则表达式分隔符,而不在最终子字符串中包含分隔符?
例如,如果我有这样的字符串:
<row><column>Header text</column></row>
提取子字符串最简单的方法是什么:
Header text
请注意子字符串可能包含换行符...
谢谢!
【问题讨论】:
在 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
【讨论】:
matcher.find() 而不是matches(),以防您正在搜索的字符串大于您正在搜索的位有兴趣。
您不应该使用正则表达式来解码 XML - 如果输入不受严格控制,这最终会中断。
最简单的方法可能是在 DOM 树中解析 XML(Java 1.4 及更新版本直接包含 XML 解析器),然后导航树以挑选出您需要的内容。
也许你想告诉你想用你的程序完成什么?
【讨论】: