質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1503閲覧

pタグ内の<!--コメント-->をpreg_replaceを使って置き換える方法

Yamanosuke

総合スコア34

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/06/09 04:09

編集2016/06/09 04:52

wordpressを利用しているのですが、<!--コメント--> htmlコメントをpタグで囲まないようにするにはどのようにしたらいいでしょうか?

下記のような形に置き換えたいと考えています。

<p> テキストテキストテキスト <!--コメント--> テキストテキストテキスト </p> ↓↓↓↓↓↓置き換え↓↓↓↓↓↓ <p> テキストテキストテキスト </p> <!--コメント--> <p> テキストテキストテキスト </p>
<p> <!--コメント--> テキストテキストテキスト </p> ↓↓↓↓↓↓置き換え↓↓↓↓↓↓ <!--コメント--> <p> テキストテキストテキスト </p>
<p> テキストテキストテキスト <!--コメント--> </p> ↓↓↓↓↓↓置き換え↓↓↓↓↓↓ <p> テキストテキストテキスト </p> <!--コメント-->

と置き換えるにはどのようにしたらいいでしょうか?

<!--コメント-->は複数あります。

宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2016/06/09 04:24

チェックする文字列の中にコメントは1つしかない、という前提で大丈夫でしょうか(<p><!--コメント--></p><!--コメント-->のような場合はどう処理すればいいでしょうか)。
masaya_ohashi

2016/06/09 04:25

PHPのタグがついていますが、PHP内で判断するということでしょうか?どういう意図があって、どこで判断したいのかを質問に明記してくださらないと、どう答えてよいのかわかりません。
Yamanosuke

2016/06/09 04:50

言葉足らずですみません。内容を変更しました。
guest

回答1

0

ベストアンサー

たとえばこんな感じでしょうか?

<?PHP $xml=<<<eod aaaaaaaaaaaaaaaaaaaaaaaa <p> bbbbbbbbbbbbbbbbbbbbbbbb <!--ccccccccccccccccc--> dddddddddddddddddddddddd </p> <p> <!--eeeeeeeeeeeeeeeee--> ffffffffffffffffffffffff </p> <p> ggggggggggggggggggggggg <!--hhhhhhhhhhhhhhhh--> </p> iiiiiiiiiiiiiiiiiiiiiii eod; $pattern="/(<p>[\r\n]{1,2})(.*?)(<!--.*?-->[\r\n]{1,2})(.*?)(<\/p>(?:[\r\n]{1,2}|$))/mis"; if(preg_match_all($pattern,$xml,$matches,PREG_SET_ORDER)){ foreach($matches as $match){ if($match[2]===""){ $xml=str_replace($match[0],$match[3].$match[1].$match[4].$match[5],$xml); }elseif($match[4]===""){ $xml=str_replace($match[0],$match[1].$match[2].$match[5].$match[3],$xml); }else{ $xml=str_replace($match[0],$match[1].$match[2].$match[5].$match[3].$match[1].$match[4].$match[5],$xml); } } };

投稿2016/06/09 04:49

編集2016/06/09 09:35
yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2016/06/09 07:43

いくつか条件が必要 (1)pタグの中にpタグが入れ子になっていない <p><p>1</p><p>2</p></p> (2)<p>タグの中に2つ以上のコメントがある場合どうするか決める もちろん2つ以上ないのであればそれでもよい (3)コメントしかないpタグは上下のどちらに逃がすかきめる そういうタグはないというならそれでもOK
Yamanosuke

2016/06/13 05:06

回答ありがとうございます。 (1)はある可能性があります。 (2)も2つ以上ある可能性があります。 (3)は上に逃がしたいと思ってます。
yambejp

2016/06/13 05:21

追加条件を見る限り非常に難しいですね かりに <p> <p> <!--コメント1--> 1 </p> <p> <!--コメント2--> 2 </p> </p> だと、まずは <p> <!--コメント1--> <p> 1 </p> <!--コメント2--> <p> 2 </p> </p> となりますが、これも結局コメントがpの中なので <!--コメント1--> <!--コメント2--> <p> <p> 1 </p> <p> 2 </p> </p> までもっていかないといけません。 ただしこれをやるともやはどのコメントがどこを指しているか わからなくなります。 とにかく仕様を固めるところからやるしかないでしょう
mpyw

2016/06/13 07:04

<p>のネストはHTMLの仕様で禁止されていますが,それを無視したHTMLを書いているということでしょうか…
yambejp

2016/06/13 07:21

いや、まぁしゃくし定規に言えばそうなのかもしれないですが pはあくまでも例でもう少し汎用的な質問なのかと・・・ ほんとはコメントでも書いた通りネストされていなければよいのですけどね まぁ前回書いた通りどこのコメントかわからなくていいなら、 コメント全部htmlの最後にもってきてしまうとか 運用でカバーすべきことのような気がします。
Yamanosuke

2016/06/16 01:10

回答ありがとうございます。 結構難しいのだと理解しました。 やり方を考えてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問