[regex] atributes uit html tag filteren.

Pagina: 1
Acties:

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 14-04 20:11
Ey,

Ik ben na al die jaren nog steeds niet zo'n held met regexes en ben zojuist dus weer op een stukje ruziemakende code gestuit.

Ik heb de html die in een tag leeft, en wil hieruit de gevraagde atributen ophalen.

Nu geeft deze code netjes alle argumenten terug die gevraagd en gevonden zijn mits ze tussen quotes staan.

Probleem doet zich voor als er geen quotes omheen staan.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function get_atributes($string,$types=array("title", "type", "href")) {
    $string=str_replace("\n",'',$string);
    preg_match_all("[(".implode($types,'|').")\s*=\s*(['|\"])?(.*?)\\2|(".implode($types,'|').")\s*=\s*([^'\"].*?)\s]", $string, &$matches);
    foreach($matches[4] as $id => $type){
    if(!empty($type)){
        $matches[1][$id]=$type;
        $matches[3][$id]=$matches[5][$id];
    }
    }
    foreach($matches[1] as $id => $type) { // rebuild the array
        $ret[$type] = trim($matches[3][$id]);
    }
    return $ret;
}


Nu kan ik natuurlijk een lose preg_match_all doen die alleen zoek vanaf de = (na een eventueel aantal spaties, en geen quotes) tot de volgende spatie maar das niet mooi, nu heb ik deze contructie op allerlei manieren aan bovenstaande regex proberen toe te voegen, maar tot nog toe, no go.

Zou iemand mij kunnen aanwijzen waar ik deze OR zou moeten toevoegen?

edit:

Ik heb de code er maar achter geplakt, (na een pipe symbol), en het werkt soort van, de array wordt nu 2 items langer, maar dat vis ik zelf wel uit, Kan niet niet veel mooier? (door bijvoorbeeld alles voor de = in een los stukje te stoppen?)

Iemand enig idee? (muchos gracias alvast)

[ Voor 57% gewijzigd door killercow op 04-11-2005 15:40 ]

openkat.nl al gezien?