php çapa etiketi regex

4 Cevap php

Her bir çapa etiketi ve url içeren dizeler bir grup var.

dize ex.

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!

i arasında çapa etiketleri ve her şeyi ayrıştırmak istiyorum.

sonuç ex.

here is a link. enjoy!

href = kısmında adresler her zaman (bazen kısaltılmış URL'ler bazen sadece açıklayıcı metin vardır) ancak bağlantı metni eşleşmiyor.

Düzenli ifadeler veya php işlevleri ile bunu nasıl bulmaktan son derece zor bir zaman yaşıyorum. nasıl ben bir dize bütün bir çapa etiket / linki ayrıştırmak?

teşekkürler!

4 Cevap

Sen regex to parse html kullanmak yerine html ayrıştırıcı kullanmak gerekir.

Ama regex kullanmak gerekir, ve çapa etiketleri iç içeriği </a> gibi html ücretsiz olması garanti edilir ve her dize ardından, örnek durumda olduğu gibi sadece bir çapa etiketi içeren garanti ise - sadece o - Senin gibi bir şey kullanabilirsiniz:

/^(.+)<a.+<\/a>(.+)$/ $1$2 ile değiştirilmesi

Sadece etiketleri / içerik kaldırma konum gibi sonuç Örneğin baktığımızda, öyle görünüyor - Eğer dışarı çıkardı ya da hiç ne tutmak istedi? Eğer değilse strip_tags() arıyor olabilir.

Sorununuz çok özel gibi görünüyor beri, ben bunu yapmak gerektiğini düşünüyorum:

$str = preg_replace('#\s?<a.*/a>#', '', $str);

sadece normal PHP dize işlevlerini kullanın.

$str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$s = explode("</a>",$str);
foreach($s as $a=>$b){
    if( strpos( $b ,"href")!==FALSE ){
        $m=strpos("$b","<a");
        echo substr($b,0,$m);
    }
}   
print end($s);

çıktı

$ php test.php
here is a link . enjoy!