プロが教える店舗&オフィスのセキュリティ対策術

たとえば、↓の場合は
 <a href="//oshiete.goo.ne.jp/">教えて!"goo"</a>

↓みたいに置換したいのです。「教えて!"goo"」の部分は<>に囲まれてないので置換対象外。
 <a href=&quot;//oshiete.goo.ne.jp/&quot;>教えて!"goo"</a>

言語はjavaを使いたいです。正規表現を用いて置換したいのですが、私には難易度が高く・・・

腕に覚えのあるプログラマーの方、なにとぞご教授いただけませんでしょうか。

A 回答 (4件)

#3です。



テキトーに作ってみました。

import java.util.regex.*;

public class Test {
public static void main(String[] args) {
StringBuffer htmlValue = new StringBuffer();
htmlValue.append("<a href=\"//oshiete.goo.ne.jp/\">教えて!\"goo\"</a>");
htmlValue.append("\n");
htmlValue.append("<b style=\"display:none\">test\" test\"</b><a href=\"hogehoge\">h\"o\"g\"e\"</a>");

Pattern pattern = Pattern.compile("(?<=<).+?(?=>)");
Matcher matcher = pattern.matcher(htmlValue.toString());

StringBuffer valueBuf = new StringBuffer();
while (matcher.find()) {
String matchValue = matcher.group(0);
matchValue = matchValue.replace("\"", "&quot;");
matcher.appendReplacement(valueBuf, matchValue);
}
matcher.appendTail(valueBuf);

System.out.println("実行前");
System.out.println(htmlValue.toString());
System.out.println("実行後");
System.out.println(valueBuf.toString());
}
}


実行前
<a href="//oshiete.goo.ne.jp/">教えて!"goo"</a>
<b style="display:none">test" test"</b><a href="hogehoge">h"o"g"e"</a>
実行後
<a href=&quot;//oshiete.goo.ne.jp/&quot;>教えて!"goo"</a>
<b style=&quot;display:none&quot;>test" test"</b><a href=&quot;hogehoge&quot;>h"o"g"e"</a>

この実装方法は、別にHTMLを解析しているわけではありません。
そのため、本来適切でないHTMLコードが含まれている場合、それ相応の動作をします。
    • good
    • 0

(?<=<).+?(?=>)



これで取ってこれたやつのダブルクォーテーションを全部&quot;に変換すれば。
【サンプル】
<a href="//oshiete.goo.ne.jp/">教えて!"goo"</a>
<b style="display:none">test" test"</b><a href="hogehoge">h"o"g"e"</a>

【結果】
a href="//oshiete.goo.ne.jp/"
/a
b style="display:none"
/b
a href="hogehoge"
/a

調べたいなら、
正規表現 肯定戻り読み
正規表現 肯定先読み

で検索してください。
エスケープなど、Javaならではのお作法があるかもしれませんので、そこは気を付けて。

参考程度にこんなサイト見つけました。
http://www.javadrive.jp/regex/lookahead/index3.h …
    • good
    • 0

1. HTML パーサーでテキストを全て解析する


2. 解析結果をそのまま出力する
3. ただし要素属性の値のみ独自の変換を行う

パーサーは標準で備えていないので、別途ライブライを探してみてください。
この用途ならば、SAX 形式で処理できるのがオススメです。
    • good
    • 0

正規表現じゃないとだめなのですか?



1文字取り出す
 < ならフラグを立てる
 > ならフラグを下す
 フラグが立っていたら、 " を &quote; に変換

でいいような。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!