
HTMLで、開始 < と終了 > に囲まれた特定の文字列を別の文字に書き替えたいのですが、思う通りに動かなくて困っており、質問させていただきます。
例えば以下の2行のHTMLがあったとします。
<font color="red">赤は英語でredです。</font>
<span style="color:red;">赤は英語でredです。</span>
このHTMLで、タグの属性として使われている「color="red"」と「style="color:red;"」の部分だけ「red」を「black」に変更したいのです。
(文字列として使われている「英語でredです」の部分はそのまま)
秀丸やさくらエディタで正規表現を使って検索すると、
<.+?red.+?>
で検索できましたがJavaでは検索ができません・・・。
コード:
String strHtml = "<html><body><font color=\"red\">赤は英語でredです。</font><span style=\"color:red;\">赤は英語でredです。</span></body></html>";
Pattern pattern = Pattern.compile( "<.+?red.+?>", Pattern.DOTALL ); // 正規表現で検索
Matcher matcher = pattern.matcher( strHtml );
while( matcher.find() ){
System.out.println( "res=" + matcher.group( 0 ) );
}
出力結果:
res=<html><body><font color="red">
res=</font><span style="color:red;">
res=<html><body><font color="red">赤は英語でredです。</font><span style="color:red;">赤は英語でredです。</span></body></html>
エディタと同じように<font color="red">と<span style="color:red;">が取りたいのですが・・・、考え方もしくは正規表現が間違っているのでしょうか?
お分かりの方がいましたら御助力いただけたら助かります。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
知っていいるわけではなくプログラムの動作からの類推になってしまうのですが・・・
A.+?B
最短一致パターン .+? は後続するパターンBの出現でマッチする文字列をそれ以上延ばさないという意味だけれども、最短一致パターンの前にあるAについて最後に出現したAの位置からマッチさせるという意味はないようですね。
よって最後に出現したAからマッチさせたい場合は最短一致パターンに依存しない別の方法を使う必要があるのだと思います。今回の例だと最短一致パターンの前は固定文字'<'なので'<'以外の文字の繰り返しというふうに記述するとエディタに指定したパターンと同様の意味のマッチングができるようです。
"<[^<]+red.+?>"
"<[^<]+?red.+?>"
(本件の場合はどちらでも結果は変わらないと思います。)
本来はどのような仕様なのかAPI Documentに書いてある文献『Mastering Regular Expressions, 3rd Edition』(Jeffrey E. F. Friedl 著、O'Reilly and Associates、2006 年) をみるべきなのでしょうが・・・すみません。持ってないのでみてません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jdbcでinsert,delete,createをe...
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
JDONWROADER2のエラー修復
-
JaneStyleのスレッドが見れなく...
-
eclipse実行ができない
-
正規表現について質問です。 カ...
-
DBからのデータを配列に格納し...
-
次のhtml・cssでspan内の文字を...
-
Processingでアイスホッケーの...
-
Processingでマウスクリックで...
-
「main メソッドを持つクラスが...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
googleスプレッドシートのGASに...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフオクの出品説明文をカラー...
-
数値Lについて
-
グラデーションの仕方
-
Adobe Golive テキストの色をど...
-
HTMLのタグ属性で指定された特...
-
ホームページ言語の質問です
-
アクセスログの「HEAD」と...
-
htmlで改行タグを入れていない...
-
パソコンのメモ帳のことで質問
-
ドラッグすると見える文字
-
トップページの入れ替えを教え...
-
HPのソースをそのまま貼り付け...
-
テーブルwidthで指定したのに幅...
-
CSSで謎の現象
-
昔のゲーム、ブラックオニキス...
-
ドメインを入力した際に「index...
-
ホームページビルダーのトップ...
-
隠しページの探し方
-
エクセルから作ったホームペー...
-
CMSサイトの見分け方は?
おすすめ情報