• 締切済み

文字列を順番に置換

以下の様な文字列があった時、それぞれのaタグにidをa1、a2、a3、…と順番につけていくにはどのような正規表現を行えばいいのでしょうか。 <ul> <li><a href="url1" title="title1">link1</a></li> <li><a href="url2" title="title2">link2</a></li> <li><a href="url3" title="title3">link3</a></li> <li><a href="url4" title="title4">link4</a></li> <li><a href="url5" title="title5">link5</a></li> <li><a href="url6" title="title6">link6</a></li> </ul> aタグの数がいくつでも対応できるようなものが望ましいです。 よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ごめんなさい、私の環境とことなるかもしれません。 一応私のところではきれいにでているので・・・ OSとPHPのバージョンは?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっと面倒ですがコールバック関数とグローバル変数をつかって こんな感じでどうでしょ? <? $html=<<<eof <ul> <li><a href="url1" title="title1">link1</a></li> <li><a href="url2" title="title2">link2</a></li> <li><a href="url3" title="title3">link3</a></li> <li><a href="url4" title="title4">link4</a></li> <li><a href="url5" title="title5">link5</a></li> <li><a href="url6" title="title6">link6</a></li> </ul> eof; $global_count=0; $html=preg_replace_callback("/<a /","callback",$html); print "<pre>".htmlspecialchars($html)."</pre>"; function callback($matches){ global $global_count; return $matches[0]."id=\"a".++$global_count."\" "; } ?>

twinhourse
質問者

お礼

ありがとうございます。 教えていただいたプログラムでそれぞれのaタグにidを挿入することはできたのですが、番号が全て1になってしまいました。関数が1回しかコールされてないんですかね。

関連するQ&A