0

我有一个字符串,我必须替换一些内容:

"...content... <a href='document/link/B1'>foo</a> ...content... <a href='document/link/B2'>bar</a> ..."

我正在寻找一种干净的方法来获得这样的东西:

"...content... <a href='document/link/23'>foo</a> ...content... <a href='document/link/24'>bar</a> ..."

链接中的“23”和“24”是我所做的一些处理的结果。所以首先我应该能够选择链接,获取它们的 url(更具体地说:我需要 B1 和 B2)然后我必须使用例如 B1 执行一些操作,这会导致“23”,然后我必须再次插入在字符串中。

有没有很好的方法来实现这一点?

4

1 回答 1

1

一般来说,使用正则表达式解析 HTML/XML 是个坏主意。但是对于一些零星的使用(只运行一次),如果你确定你的 HTML 的结构并且不需要太多的健壮性,像这样的东西(基于this)可以做到这一点:

   String original = "..content... <a href='document/link/B1'>foo</a> ...content... <a href='document/link/B2'>bar</a> ...";
   StringBuffer sb = new StringBuffer();
   // tweak the following
   Pattern pattern = Pattern.compile("(<a href='document/link/)([^']*)('>)");
   Matcher matcher = pattern.matcher(original);
   while(matcher.find()) {
      String oldlinkPart = matcher.group(2);
      String newlinkPart = buildNewLinkPart(oldLinkPart); // here you do your look-up
      matcher.appendReplacement(sb, matcher.group(1) + newlinkPart + matcher.group(3));
   }
   matcher.appendTail(sb);
   String modified = sb.toString();

您可以将正则表达式模式调整为更通用(更多空格、制表符、A 标记内的其他属性、区分大小写、双引号),但是当您开始假装完全通用时,您的代码可以正常工作形成 HTML,然后你就搞砸了:尝试使用 XML/DOM 解析器。

于 2012-04-13T15:23:28.853 回答