Bulmak için düzenli ifade

4 Cevap php

Gerekli düzenli ifadeler ile yardımcı olur. Ben düzenli ifadeler kullanarak çalışıyor ve preg_match_all blokları bulmak ediyorum <character>...</character>. İşte benim veri gibi görünüyor nasıl:

<character>
杜塞尔多夫
杜塞爾多夫
    <div class="hp">dùsàiěrduōfū<div class="hp">dkfjdkfj</div></div>
    <div class="tr"><span class="green"><i>г.</i></span> Duesseldorf (<i>Deutschland</i>)</div>
    <div class="tr"></div>
</character>

<character>
    我, 是谁
    <div class="hp">текст</div>
    <div class="tr">some text in different languages</div>
</character>

Ben denedim \<character\>.*\<\/character> ama ne yazık ki işe yaramadı. Herhangi bir öneriniz?

4 Cevap

Fonksiyonların preg ailesini kullanıyorsanız, düzenli ifade olmalıdır:

/\<character>(.*?)\<\/character>/s

Olmayan açgözlü operatörü ? </character> sadece bir maç ilk <character> başlayan ve sonunda biten almak sizi engelleyecektir. {[(3) }] bayrak nokta satır sonlarını maç sağlayacak.

Bunu yapmak için normal ifadeler kullanmak gunpoint gerekli sürece, DOMDocument çok daha doğru olacaktır.

<?php

$dom = new DOMDocument;
$dom->loadXML($data);

$character_nodes = $dom->getElementsByTagName('character');

// use $character_nodes...
?>

Denemek

<character>(.*?)<\/character>

Soru işareti mümkün olduğunca kısa bir dize maç olacak, yani bir ungreedy ön eleme. Ayrıca < ve> kaçan gerekmez.

Sen doğru işlem UTF8 metin "/ u" seçeneğini kullanmanız gerekebilir.

http://php.net/manual/en/reference.pcre.pattern.modifiers.php