正则表达式使用结果替换String

时间:2016-05-15 10:16:28

标签: java regex

我想要选择<h3>/h3> <之间的所有文字。选择后,我喜欢用结果替换我的String的值。在以下示例中,结果应为基本信息

String test="<h3>Basic Information</h3> <div>";
test = test.replaceAll("<h3>(.*?)</h3>", "$1");

但目前结果是

  

基本信息& lt; div& gt;

2 个答案:

答案 0 :(得分:4)

使用正则表达式,您可以:

String test="<h3>Basic Information</h3> <div>";
String repl = test.replaceFirst(".*<h3>([^&]+).*/h3> <.*", "$1");
//=> Basic Information

虽然您可以完全避免使用正则表达式,但也可以使用String API来提取相同的文本。

或者,您可以使用此正则表达式进行匹配:

<h3>([^&]+).*/h3> <

使用PatternMatches API抓取捕获的第1组。

答案 1 :(得分:1)

试试这个:

Pattern pattern = Pattern.compile("<h3>(.*)<\\/h3>");
Matcher matcher = pattern.matcher("<h3>Basic Information</h3> <div>");
matcher.find();
StringBuffer sb = new StringBuffer();
matcher.appendReplacement(sb,"$1");
String result = sb.toString();

由于在appendTail方法结束时调用了replaceFirst方法,因此只能将其替换为第一个。匹配器将使用替换未指定的组,使用替换指定的组,当然还有非匹配位,因为没有匹配为他们创造,他们根本没有被取代。

如果是您的查询:

第0组:< h3>

第1组:基本信息

第0组:< / h3>

不匹配:< div>

这只是您可以使用匹配器执行的操作的一般示例。当然,如果你只想要特定的小组......那么只需使用:

matcher.group(1)