Jeg prøver at preg_match_all'e et javascript-array ud fra en hel streng
af html, her er et eksempel på arrayet:
var images =
['images/products/movies/13750_1.jpg','images/products/movies/13750_2.jpg']
Her er et klip php
// $data er en lang steng med html
$exp="/var images = \[(,?'[^']*')*]/";
$res=preg_match_all($exp,$data,$matches,PREG_SET_ORDER);
echo "<hr>Matches: ".$res." Exp = ".$exp."<br>";
print_r_html($matches); // print_r, der skriver ud i html
Resultat:
Matches: 1 Exp = /var images = \[(,?'[^']*')*]/
Array
* 0 => Array
o 0 => var images =
['images/products/movies/13750_1.jpg','images/products/movies/13750_2.jpg']
o 1 => ,'images/products/movies/13750_2.jpg'
Hvorfor får jeg kun det sidste element i arrayet?
Det jeg prøver at sige i exp er:
$exp="/var images = \[(,?'[^']*')*]/";
"var images = \[" Strengen skal starte med "var images = [" ([ er ikke
start af en klasse, er derfor escapet).
"(" Gentag
",?" 0 eller 1 komma
"'" Anførselstegn
"[^']*" nogle tegn, er ikke er anførselstegn
"'" Anførsestegn
")*" Et antal gentagelser af ovenstående
"]" Slutbracket for array. Skal ikke escapes; det er ikke en klasse, da
det ikke er startet med [
Hvad gør jeg galt?
Jeg har også prøvet med /var images = \[(,?'([^']*)')*]/
Det giver pænt filnavnet uden '', som jeg egentlig vil have, men stadig
kun det sidste element.
/var images = \[((,?)'([^']*)')*\]/ giver ingen forskel
PREG_PATTERN_ORDER i stedet for PREG_SET_ORDER returnerer stadig kun det
andet element
Leif
PS: Undskyld det lange indlæg; denne gang hjalp det ikke at formulere
problemet for mig selv. Nogle gange er det nok at skrive et spørgsmål;
når det er formuleret grundigt nok så andre kan forstå det, så ser man
løsningen selv.
Jeg havde en kollega, der havde en tøjbamse, der bare skulle bruges til
at lytte til problemformuleringen. Det var mere effektivt end at jeg
skulle bruges til det. Men jeg ville da ikke have noget imod at være
tøjbamse for hende