![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS HTMLで特定の文字だけ色を変えたいのですが、指定した色と違う色が反映してしまいます。 下記、「前」 5 2023/06/27 12:08
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- その他(IT・Webサービス) cssの@mediaについて 1 2023/05/14 07:34
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
session,requestはjspで未定義...
-
配列にnullを代入すると、null...
-
自作Androidアプリのデータ引き...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
改行含むテキストの表示の仕方
-
JaneStyleのスレッドが見れなく...
-
キー入力について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフオクの出品説明文をカラー...
-
数値Lについて
-
グラデーションの仕方
-
触れたときに文字の色を変える方法
-
文字色が反映されない
-
HTMLのタグ属性で指定された特...
-
アクセスログの「HEAD」と...
-
htmlで改行タグを入れていない...
-
大きくなった文字を元に戻すには?
-
ドラッグすると見える文字
-
隠しページの探し方
-
トップページの入れ替えを教え...
-
HPのソースをそのまま貼り付け...
-
macでhtmlのタグを打って、開い...
-
拡張子の変え方
-
アドレスバーへの直接入力を禁...
-
ExcelのVBAの正規表現で二重引...
-
検索結果のページの文字が小さい!
-
ホームページビルダーのトップ...
-
WINで複数のデスクトップを切り...
おすすめ情報