php - regex - Birden etiketleri içinde yakalamak dize

1 Cevap php

hala regex üzerinde! ;-)))

Bu gibi aşağıda aynı yapıyla <tr> satır bir sürü bir html dosyası var varsayarsak, burada (.*?) i ayıklamak için gereken içeriği!

<tr align=center><th width=5%><a OnClick="(.*?)"href=#>(.*?)</a><td width=5%>(.*?)<td width=5% align=center >(.*?)</td></tr>

UPDATED

belki ile bir güzel preg_match_all()?

Ben bu sonucu gibi bir şey gerekir

match[0] . match[1] . match[2] . match[3]

ihtimale birisi gerekmez Someting benzer!

THE SOLUTION Benim küçük bir sorun olduğunu

/<a\s*OnClick=\"(.*?)\"href=#>(.*?)<\/a><td[^>]+>(.*?)<td[^>]+>(.*?)<\/td><\/tr>/m

zaman için teşekkürler!

Luca filosofi!

1 Cevap

Burada bir regex kullanmak zorunda ile de oldukça mutsuz - çılgınca karşı regex maç için gerçek örnek veri olmadan burada tahmin. Lütfen tablolar daima benzeyebiliyoruz sürece, ben regexes ile çok eğleneceksiniz şüpheliyim.

Her neyse, bir kenara tüm uyarılar, bu işe yarayabilir:

<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr>

Bu etiketleri (ve <a> etiketi içindeki nitelikler) tam olarak bu sırayla, tırnaklı dizge içinde hiçbir açılı ayraçlar, hayır (tüm bu şeyler vs vs tırnaklı dizge içinde tırnak kaçtı beklediğini değil mi ) Eğer bir ayrıştırıcı kullandıysanız endişelenmenize gerek.

PHP:

preg_match_all('%<tr[^>]+><th[^>]+><a OnClick="([^"]+)"\s*href="([^"]+)">([^<]+)</a><td[^>]+>([^<]+)<td[^>]+>([^<]+)</td></tr>%', $subject, $result, PREG_PATTERN_ORDER);

$result ardından $result[0] tüm maç, $result[1] hiçbir grup yakalayan ihtiva içeren bir dizidir. 1 vs