• 締切済み

HTMLタグを取得する正規表現

HTMLタグを取得する正規表現が出来ず、困っています。 <b><a href="http://aaa.ccc.co.jp">あいうえお</a></b> このような文字列であった時、 「<b><a href="http://aaa.ccc.co.jp">」を取得したいのです。 プログラムで制御する事も含め、以下のような動作を望んでいます。 1.「<b><a href="http://aaa.ccc.co.jp">」を取得する 2.対象文字列を「あいうえお</a></b>」にする 3.「あいうえお」を取得する 4.対象文字列を「</a></b>」にする 5.「</a></b>」を取得する やりたい事は「実際の表示上の文字数で文字数制限を行い、制限分の文字列を出力する」です。 なので、もし上記のような事をやる必要ないというのなら、その手段もご教示頂ければと思います。

みんなの回答

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

>やりたい事は「実際の表示上の文字数で文字数制限を行い、制限分の文字列を出力する」です。 意味がよくわかりません。 「表示上の文字数」というのは「あいうえお」で5文字ということですか? 文字数であってバイト数でなくてよいのですか? それをどう「制限」して、どう「出力」するのですか? とりあえず1~5に関してはこんな感じで、4と5は同じなので割愛。 <?PHP $str1=<<<eof <b><a href="http://aaa.ccc.co.jp">あいうえお</a></b> eof; print "Org.".htmlspecialchars($str1)."<br>"; preg_match("/(<b><a [^>]+>)/",$str1,$match); $str2=$match[1]; print "1.".htmlspecialchars($str2)."<br>"; $str3=str_replace($str2,"",$str1); print "2.".htmlspecialchars($str3)."<br>"; preg_match("/([^<\/a><\/b>]+)<\/a><\/b>/",$str3,$match); $str4=$match[1]; print "3.".htmlspecialchars($str4)."<br>"; $str5=str_replace($str4,"",$str3); print "4.".htmlspecialchars($str5)."<br>"; ?>

naktak
質問者

補足

すみません、質問内容に不備がありました。 HTMLタグの存在は可変であり、エレメントもAやBだけとは限りません。 「表示上の文字列」とは「あいうえお」ですが、 それを表示する時の全てのHTMLは「<b><a href="​http://aaa.ccc.co.jp">​あいうえお</a></b>」です。 バイト数ではなく文字数です。 つまり、「<b><a href="​http://aaa.ccc.co.jp">​あいうえお</a></b>」という文字を 解析して、表示文字制限が5文字であった時、実際にユーザーに 文字列として出力される部分である「あいうえお」(HTMLのエスケープはしません) の文字列を5文字出力し、かつ「あいうえお」はHTMLタグ内に 存在している為、「あいうえお」を囲っているHTMLも出力します。 これが1~4文字という表示文字数制限であった時、「あいうえお」は 1~4文字という制限に満たない為、HTMLも含め何も出力されません。 それを行う為、HTMLの開始部分と文字列、HTMLの終了部分を 別々に取り出して文字数を算出し、出力すべきHTMLを生成したい、 という結論に達しています。

すると、全ての回答が全文表示されます。

専門家に質問してみよう