Düzenli ifadeler ile * İki * html etiketlerini bulmakta

3 Cevap php

İki paragraf etiketleri dışarı içeriği çekin ve bir <br /> etiketi ile onu kırmak gerekir. Girdi çok gibidir

<p>
Yay
</p>
<p>
StackOverFlow
</p>

Bu gibi olması gerekiyor

<p>
Yay <br />
StackOverflow
</p>

Ne kadar var sadece ilk paragraf etiketi çeker <p><?php preg_match('/<p>(.*)<\/p>/', $content, $match); echo($match[1])."..."; ?></p> hangisi:

<p>
Yay...
</p>

Ayrıca, bir karakter sınırı ayarlamak mümkün mü? Paragrafların iki veya örneğin 40 karakter maksimum kullanmak zorunda substr? Olur

Teşekkürler!

Bu yüzden ortaya çıktı:

<?php $content = preg_replace('/<\/p>\s*<p>/', '<br/>', $content);  echo substr("$content",0,180)."..."; ?>

3 Cevap

Ben bunu olması gerekenden daha daha karmaşık hale düşünüyorum. Eğer daraltmak istediğiniz göz önüne alındığında:

<p>Yay</p><p>StackOverFlow</p>

içine:

<p>Yay<br />StackOverflow</p>

Sonra sadece </p><p> için örneklerini yerine <br>: preg_replace('/<\/p>\s*<p>/', '<br/>', $input).


Ancak genel olarak, karmaşık ayrıştırma bu tür tehlikelerle doludur için normal ifadelerin kullanımının unutmayın. Daha kısaca:

"Some people, when faced with a problem, think, 'I know, I'll use regular expressions.' Now they have two problems." -- Jamie Zawinski

Kendinize bir iyilik yapın ve bir HTML çözümleyici (DOMDocument::loadHTML örneğin) kullanın. Daha kolay ve daha az kırılgan.

My advice, Regex can only go so far. See one of my posts here: http://stackoverflow.com/questions/1236915/extracting-text-fragment-from-a-html-body-in-net

Bu çok dize kesme regex vardır.