İç içe html etiketleri için preg_match

3 Cevap php

I preg_match_all() php aracılığıyla, tüm "dev" etiketleri ve kendi içeriğini yakalamak istiyorum ama iç içe geçmiş olanları alınamıyor.

data:

<dev>aaa</dev> <dev>bbb</dev> <dev> ccc <dev>ddd</dev> </dev>

my expression so far:

|<dev>(.*)</dev>|Uis

thanks, for your help, b.

3 Cevap

Ayrıştırma için normal ifadeler kullanmayın. DOMDocument ya da benzeri bir gerçek ayrıştırıcı kullanın SimpleXML:

$xml = simplexml_load_string('<root>'.$str.'</root>');

*, açgözlü bir operatör olan mümkün olduğu kadar çok karakter tüketir. Sen küçük olası eşleşmeleri bulmak yerine *?, açgözlü olmayan bir sürümünü kullanmanız gerekir. Belki regexes bunu yapmak için en iyi araçlardır değildir.

Sen bir özyinelemeli eşleşen deseni olması gerekir:

/<dev>(.*|(?R))<\/dev>/i

Bu sadece herhangi bir iç içe unsurları emmek olacak, böylece daha sonra bu ayrıştırmak istiyorsanız, $ maçları tekrar fonksiyonu çalıştırmak zorunda olacak [1]