質問: よろしくお願いします。 PHPで、ある文字列をhtmlのタブ付テキストに変換する仕組みを作りたいと思っています。 フォームのテキストエリアから、 **タイトルあいうえお かきくけこさしすせそ たちつてと タイトルなにぬねの はいふへほ** ↑このような文字列を得て、$bunshoに収めたとします。 これを、最終的には、↓のような文字列に変換したいです。 **あいうえお かきくけこさしすせそ たちつてと タイトルなにぬねの はいふへほ** まず、 ``` $bunsho =str_replace("\n","",$bunsho); $bunsho =str_replace("タイトル","",$bunsho); ``` の2つの命令で、↓のようにできました。 **あいうえお かきくけこさしすせそ たちつてと なにぬねの はいふへほ** この先がわかりません。 **「""の次の""を""に変換する」** というのは、どう書けばいいのでしょうか?
回答: 複雑な文字列置換は正規表現の使えるpreg_replaceを使って変換するとよいでしょう。 ``` $bunsho ="タイトルあいうえお かきくけこさしすせそ たちつてと タイトルなにぬねの はいふへほ"; $bunsho = preg_replace('/タイトル(.*)/', '${1}', $bunsho); $bunsho = str_replace("\n", "", $bunsho); echo $bunsho; ``` タイトル◯◯◯という文字列を見つけて、で◯◯◯を囲んで変換しています。preg_replaceを先にやらないと改行文字が消えてしまって正規表現の動作が思ったとおりにならないので気をつけましょう。 ### 修正版 ちょっと修正して要望通りの動作にしてみました。 ``` $bunsho ="タイトルあいうえお かきくけこさしすせそ たちつてと タイトルなにぬねの はいふへほ"; $bunsho = str_replace("\n", "\n", $bunsho); $bunsho = preg_replace('/タイトル(.*?)/', '${1}', $bunsho); echo $bunsho; ``` ### 余談 あと余談ですが、こういった機能を自前で実装するよりも、markdownという仕組みを使うほうが最近のWebではよく見かけます。teratailの質問文を書くときに見出しやリストや太字や斜体が使えるあれです。#や-の記号を使って、それらをHTMLのタグに置き換えて出力する機能です。一度調べてみてはいかがでしょうか。