2016-04-19 8 views
3

私は文字列にHTMLを持っています。私は<head>部分を剥がしたいと思う。私は以下を使用します:特定のタグから文字列を取り除く最速の方法は何ですか

$html = preg_replace("/<head[^>]*?>.*?<\/head>/s", "", $html); 

しかし、これは少し重くなる可能性があります。よりよい選択肢がありますか?

私はstrip_tags()を使用でき、2番目の引数にすべての受け入れられたタグをリストすることができますが、リストするにはあまりにも多くのことがわかります。

+0

'strpos()'を使用して、 ''タグの開閉の位置を特定して部分文字列を取得できますが、それが良いかどうかはわかりませんそれを再演する方法。 – Paul

+6

あなたはより良い正規表現を書くことができます:) ['] *?> [^ <] *(?:<(?!\/head>)[^ <]*)*<\/head>'](https://regex101.com/r/iY3cC5/2)。 [あなたの](https://regex101.com/r/iY3cC5/1)と比較してください。 –

+0

@WiktorStribiżewそれは1つです!あなたは答えを書いて、それがどのように歩みを減らすかなどを説明することができますか?非常に印象的です。同じ正規表現に複数のタグを追加できますか? '

答えて

0

あなたの現在の正規表現は、このSOページの一部に対してテストすると6720ステップを要します。

この正規表現<head[^>]*?>(?:[^<]*<??)*</head>は、376ステップしか必要とせず、同じことを返します。正規表現よりも20倍近く速いはずです。

それは貪欲ここ<ではありません、すべて照合することによって動作します:<??は怠け者なので、それはすぐに</head>に一致するようにしようとします、そして、[^<]*

を。一致するものがない場合は、<??がキックインします。

関連する問題