通常、正規表現を使用してHTMLを解析しないでください。
この場合、正規表現ソリューションは正常に機能する可能性があります。
$str = preg_replace('~<p>.*?</p>~s', '', $str, 1);
重要なことは
- これ
?
は.*
貪欲になります(できるだけ早く停止し、最後まで継続しないようにするため)</p>
- 新しい行に一致できるように
s
する修飾子.
1
最初の一致のみが削除されるようにする制限
タグの内容のみを削除したい場合(つまり、空の段落を保持したい場合)は、単に<p></p>
置換文字列として使用します。
しかし、私が言ったように、これはまだ完璧な解決策ではありません。<p>
コメント内の<p>
タグ、または属性や無効なHTMLを含むタグについて考えてみてください。PHPにはDOMパーサーが付属しています。サードパーティのライブラリを使用できる場合は、これもあります。これは非常に便利で、問題はほとんど簡単です。
require "simple_html_dom.php";
$html = new simple_html_dom($input);
$html->load($input);
$html->find('p', 0)->outertext = "";
$output = $html->save();
同様に、タグを空にしたいがそのままにしておきたい場合は、に置き換えoutertext
ますinnertext
。