正規表現で質問です


先ほど、

<img src="hoge.jpg" alt="hoge">

を、一括で

<img src="hoge.jpg" alt="hoge" title="hoge">

にする正規表現で、

s/alt="\(.*\)"/alt="\1" title="\1"/g

<img src="(.*?)\.jpg" alt="(.*?)">

という回答をもらいました。

これは、うまくいったのですが、

<img> タグの中の alt であること

また、

alt タグがない、<img> もひっかけたい

という要件を、正規表現に追加することは可能なんでしょうか?

ちょっと、正規表現が面白くなってきました

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/09/09 11:40:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:wizemperor No.1

回答回数379ベストアンサー獲得回数52

ポイント60pt

alt属性がないimg要素にマッチさせるには、前回の回答を踏まえると次のようになります。


検索文字列:

<img src="(.*?)\.jpg"( alt="(.*?)")?>

alt属性全体をグループ化して「?」(0回か1回出現)をつけます。


変換する場合は次のような感じになりますね(これはalt属性ない場合はだめですけど)


置換後文字列:

<img src="\1.jpg"\2 title="\3">
  • id:wizemperor
    回答の補足です。

    正規表現中に「<img ~」とあるので、元からimgタグ以外のタグにはマッチしないですね。
  • id:rikimaru
    なるほど、これは、とても面白いですね

    ただ、この条件の場合、alt がなかったとき、alt="" title="" となってしまうんでしょうか?

    ちょっと、検証環境がないので、また試してみたいと思いますが

    alt がなかったら、そもそも、この操作の対象にならないという条件も追加できると面白いですね

  • id:takabow
    altが無かったら<img src="hoge.jpg" title="">になるんじゃないっすかね。
  • id:rikimaru
    <img src="\1.jpg"\2 title="\3">

    確かに、これだとそうなりそうですね

    <img src="\1.jpg" alt="\2" title="\3">

    これで

    <img src="hoge.jpg" alt="" title="">

    になるのかな
  • id:wizemperor
    >ただ、この条件の場合、alt がなかったとき、alt="" title="" となってしまうんでしょうか?

    takabowさんの回答のとおりです。

    > <img src="\1.jpg" alt="\2" title="\3">

    でもいいですが、仕組み的には検索文字列を

    <img src="(.*?)\.jpg"(?: alt="(.*?)")?>

    として、置換文字列を

    <img src="\1.jpg" alt="\2" title="\2">

    とするほうがいいかもですね。プログラムなどで使う場合はもうちょっと柔軟な正規表現にしたほうがいいですが、置換目的にはこれで十分かと思います。
  • id:rikimaru
    正規表現は、私が思っていた以上に、色々出来るんですね

    少し、勉強してみよういう意欲が沸いてきました

    ありがとうございました

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません