drewMedlem sedan mars 2007845 inlägg Jag har
<contributions status="past" from="2006-01-01" to="2008-01-11" position="Developer"/>
Och försöker hitta innehållet i status med
preg_match('|status="(.*)"|', $data, $out);
Svaret blir
past" from="2006-01-01" to="2008-01-11" position="Developer
Tanken är att det ska sluta letas vid första " efter status=" så svaret ska bli
past
Jag skulle ju kunna använda strtok eller liknande för att slänga det som är efter första " i svaret, men det måste ju gå att få in i preg_match.
Hur?
/drew
Peter SMedlem sedan dec. 20025 483 inlägg preg_match('|status="([^"]*)"|', $data, $out);
drewMedlem sedan mars 2007845 inlägg Funkade perfekt, tack. Har du lust att förklara?
Enligt "Regex in a nutshell" så betyder det "any character not listed". Jag trodde den skulle ge samma resultat så utom att den tagit bort ".
Peter SMedlem sedan dec. 20025 483 inlägg Båda mönstrena är greedy, vilket innebär att de försöker matcha så många tecken som möjligt innan ". Med andra ord matchar ditt mönster alla tecken innan det sista " i strängen. En annan lösning hade varit att ändra ditt mönster till att vara non-greedy, d.v.s. matcha så få tecken som möjligt innan ". Detta görs genom att sätta ett ? efter *.
Mitt mönster säger: matcha noll eller flera tecken som inte är ". Tecknena skall sedan följas av ett ".