Nasıl bir "içermiyor yapabilirsiniz"

4 Cevap php

Bu benim dize:

<br/><span style=\'background:yellow\'>Some data</span>,<span style=\'background:yellow\'>More data</span><br/>(more data)<br/>';

Ben bu çıktıyı üretmek istiyorum:

Bazı veriler, daha fazla veri

Sağ şimdi, verileri filtrelemek için PHP bunu:

$rePlaats = "#<br/>([^<]*)<br/>[^<]*<br/>';#";
$aPlaats = array();
preg_match($rePlaats, $lnURL, $aPlaats);    // $lnURL is the source string
$evnPlaats = $aPlaats[1];

Burada gösterildiği gibi, bu <span> etiketleri olmasa bu işe:

<br/>Bazı veriler, daha fazla veri<br/>(more data)<br/>';

Ben (<br/> hariç) HTML etiketlerini tahammül ve strip_tags() fonksiyonu ile <span> etiketleri dışarı atmak için regex yeniden yazmak zorunda kalacak. Ben regex bir "içermiyor" işlemi nasıl yapabilirim?

4 Cevap

Bu DOM titiz dinlemeyin. DOM ile HTML ayrıştırma size anlaşılmaz bir ağacı olacak. Eğer sonra ne biliyorsanız, regex HTML ayrıştırmak için mükemmel ok.

Adım 1) <br */?> {mola} ile değiştirin

Adım 2) boş bir dize ile <[^>]*> değiştirin

Adım 3) ile {mola} değiştirin <br>

çok regex ile kendinizi üzülmek yok. Normal PHP dize işlevlerini kullanın

$str = "<br/><span style=\'background:yellow\'>Some data</span>,<span style=\'background:yellow\'>More data</span><br/>(more data)<br/>';";
$s = explode("</span>",$str);
for($i=0;$i<count($s)-1;$i++){
    print preg_replace("/.*>/","",$s[$i]) ."\n"; #minimal regex
}

Eğer almak istediğiniz verileri tüm yakın olduğundan, "</span>" patlayabilir "</span>". Sonra dizinin her elemanı geçmesi, baştan yerine kadar ">". Bu veri alacak. Son eleman hariçtir.

çıktı

$ php test.php
Some data
More data

Eğer gerçekten bu düzenli ifadeler kullanmak istiyorsanız, o zaman regex cümledeki kullanarak daha iyidir. Bu regex, etiketler maç GEREKEN mükemmel olmayabilir bu yüzden sadece benim başın üst kapalı o kadar çırpılmış:

<[A-zA-Z0-9] {0,20} (\ s + [a-zA-Z0-9] {0,20} = (("[^"] ?")|('[^']? ' ))) {0,20} \ s * [/] {0,1}>

Tüm etiketler gitti bir kez dize manipülasyon kalanı oldukça kolay olmalıdır

Söylendiği gibi birçok kez html ayrıştırmak için regex kullanmayın. Yerine DOM kullanın.