Koymak için düzenli ifade

1 Cevap php

Ben bir diziye <p>, <ul> and <ol> gibi her paragraf eleman koymak için PHP bir işlev için arıyorum. I ilk iki paragraf displayen ve diğerleri gizleme gibi, paragraf işleyebilirsiniz böylece.

Bu fonksiyon, p-eleman için hile yapar. Nasıl ben de ul ve ol maç regexpi ayarlayabilirsiniz? <Şikayetçi: Benim denemem bir hata veriyor bir operatör değil ...

function aantalP($in){
    preg_match_all("|<p>(.*)</p>|U",
    	$in,
        $out, PREG_PATTERN_ORDER);
    return $out;
}

//tryout:
    function aantalPT($in){
        preg_match_all("|(<p> | <ol>)(.*)(</p>|</o>)|U",
        	$in,
            $out, PREG_PATTERN_ORDER);
        return $out;
    }

Herkes bana yardımcı olabilir misiniz?

1 Cevap

Düzenli ifadeler ile güvenilir bunu yapamaz. Genellikle iç içe değil (çünkü onlar olabilir ancak) paragraflar çoğunlukla tamam. Listeler ancak rutin iç içe ve düzenli ifadeler düşmek bir alan bulunuyor edilir.

PHP HTML ayrıştırma ve seçilmiş elemanları almak için birden fazla yol vardır. Sadece onlardan birini kullanın. Bu çok daha güçlü olacak.

Parse HTML With PHP And DOM ile başlayın.

Eğer really regex rota aşağı gitmek istiyorsanız, ile başlar:

function aantalPT($in){
  preg_match_all('!<(p|ol)>(.*)</\1>!Us', $in, $out);
  return $out;
}

Varsayılan değer olarak Note: PREG_PATTERN_ORDER gerekli değildir.

Temel olarak, eşleşen etiketi bulmak için backreference kullanın. Bu tür listelerde iç içe olan içe listeleri ve paragraflar gibi birçok nedenden dolayı başarısız olur. Ve hayır, bu sorunları düzenli ifadeler ile (güvenilir) çözülebilir değildir.

(Doğru) işaret ettiği gibi Edit:, regex de bir boru delimeter kullanılan ve sizin regex bir boru karakteri kullanılarak olduğunu kusurlu. Ben genellikle kullanın! normalde (değil zaten benim desen) desen oluşmaz gibi. Bazı eğik kullanabilirsiniz ama onlar da bu modelde belirir. Tilde (~) bir başka makul ortak bir seçimdir.