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 を解析することはお勧めできません。しかし、いくつかの散発的な使用 (1 回だけ実行) の場合、および 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 タグ内の追加の属性、大文字と小文字の区別、二重引用符)。代わりに XML/DOM パーサーを試してみてください。

于 2012-04-13T15:23:28.853 に答える