PHP regex yardım -

2 Cevap php

Yani, HTML etiketleri arar ve biraz onları değiştirir regex var. Bu harika çalışıyor, ama ben buluyorum son kapanış HTML etiketi ile özel bir şey yapmak gerekiyor. Bunu yapmanın en iyi yolu emin değil. Ben ters reg ex çeşit düşünüyorum, ama bunu yapmak için bir yol bulamadı. İşte benim kod kadar bulunuyor:

$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';

$pattern = array('/<([A-Z][A-Z0-9]*)(\b[^>]*)>/i');
$replace = array('<tag>');
$html = preg_replace($pattern,$replace,$html);

// Outputs: <tag><tag>This is a test</p></div>

Ben, özel bir şey ile <tag> son durum oluşmasına yerine örneğin söylemek, <end_tag> istiyorum.

Herhangi bir fikir?

2 Cevap

Ben bu hakkı okursanız, belgede son kapanış etiketini bulmak istiyorum.

Sen ondan sonra </*> daha fazla sahip en son geçtiği '<>' karakterleri bulabiliriz. Bu kalan tüm açı-parantez &lt; ve &gt; olarak kodlanmış varsayarak, son etiketi olacak:

<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';

// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p></tag>'
echo preg_replace('/<\/[A-Z][A-Z0-9]*>([^<>]*)$/i', '</tag>$1', $html);

Bu son kapanış etiketi izleyen herhangi bir içerik koruyarak, </tag> ile son </div> yerini alacak.

Sadece kapanış etiketiyle bunu yapmak isterdim neden bunu değiştirmek gibi ben de eşleşen açılış etiketini değiştirmek zorunda, bilmiyorum. Ayrıca, bu <img /> veya <br /> gibi son öz-kapama etiketi, bulmak için başarısız olur.

Ben bu yöntemi yetersiz yıllardan @ gibi aynı şekilde çalışır, ama daha kısa olduğuna inanıyorum:

<?php
$html = '<div id="test"><p style="hello_world">This is a test.</p></div>';
$readmore = ' <a href="/foo/bar">Read More&hellip;</a>';

// Outputs:
// '<div id="test"><p style="hello_world">This is a test.</p> <a href="/foo/bar">Read More&hellip;</a></div>'
echo preg_replace('#</\w>\s*$#', $readmore .'$1', $html);
?>