Nilladilla Skrevet 2. desember 2008 Skrevet 2. desember 2008 Jeg bruker denne regex'en til å finne linker i en html-kode: $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>"; Denne fanger opp alle linker flott, men jeg vil snevre inn litt hvilke typer linker den henter. Det jeg vil er å finne kun linker som har en rel-tag, nærmere bestemt i denne formatet: <a href="http://site.com/folder/id769182" rel="imagetooltip[media-someIDstuff.jpg]">Link name</a> Informasjonen jeg henter ut er URLen, navnet på linken og inneholdet rel-taggen er ikke viktige. Eineste løsningen jeg har funnet ut er å filtrere linkene etter regexpen er kjørt, men hadde vært flott om de kunne taes før det.
OISNOT Skrevet 2. desember 2008 Skrevet 2. desember 2008 Jeg bruker denne regex'en til å finne linker i en html-kode: $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>"; Denne fanger opp alle linker flott, men jeg vil snevre inn litt hvilke typer linker den henter. Det jeg vil er å finne kun linker som har en rel-tag, nærmere bestemt i denne formatet: <a href="http://site.com/folder/id769182" rel="imagetooltip[media-someIDstuff.jpg]">Link name</a> Informasjonen jeg henter ut er URLen, navnet på linken og inneholdet rel-taggen er ikke viktige. Eineste løsningen jeg har funnet ut er å filtrere linkene etter regexpen er kjørt, men hadde vært flott om de kunne taes før det. For å inkludere linker med rel før href etc, må det vel litt filtering til. <?php $text = <<< EOF <a href="http://site.com/folder/id769182" rel="imagetooltip[media-someIDstuff.jpg]">Link name</a> <a href="http://site.com/folder/id769184" title="sdf" uhu="sdf" rel="imagetooltip[media-someotherstuff.jpg]">Link two</a> <a href="http://site.com/folder/id769186">Link three</a> <a rel="imagetooltip[media-someotherstuff.jpg]" title="sdf">Link four</a> EOF; $regex = '#<a\s+(?:(?:href="(?P<href>[^">]*)"\s*)|(?:rel="(?P<rel>[^">]*)"\s*)|(?:\w+="[^">]*"\s*))+\s*>(?P<text>.*?)</a>#smi'; if (preg_match_all($regex, $text, $matches)) { $arr['rel'] = array_filter($matches['rel']); $arr['href'] = array_intersect_key($matches['href'], $arr['rel']); $arr['text'] = array_intersect_key($matches['text'], $arr['rel']); print_r($arr); } else { echo "No matches\n"; } Kanskje denne vil være til nytte og function array_spreadsheet_flip(array $arr) { $out = array(); foreach ($arr as $k => $sub) { foreach ($sub as $sk => $val) { $out[$sk][$k] = $val; } } return $out; }
Nilladilla Skrevet 2. desember 2008 Forfatter Skrevet 2. desember 2008 (endret) Akkurat hva jeg trengte. Mer effektiv enn det jeg hadde laget selv og med mindre kode. Til og med lært noe har jeg og, takker og bukker $regex = '#<a\s+(?:(?:href="(?P<href>[^">]*)"\s*)|(?:rel="(?P<rel>[^">]*)"\s*)|(?:\w+="[^">]*"\s*))+\s*>(?P<text>.*?)</a>#smi'; if (preg_match_all($regex, $text, $matches)) { $arr['rel'] = array_filter($matches['rel']); $arr['href'] = array_intersect_key($matches['href'], $arr['rel']); $arr['text'] = array_intersect_key($matches['text'], $arr['rel']); print_r($arr); } else { echo "No matches\n"; } Endret 2. desember 2008 av Nilladilla
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå