16/06-2006 19:20:40 burde nu også virke. Har du afprøvet den?
Men hvorfor?>
Et ()-par "fanger" det som er indenfor i parenteserne, altså det som matcher .*?. Det, som er, fanget kan efterfølgende hentes frem som $1. Hvis der er et parentespar mere så fanger dette som $2, det næste igen som $3, osv.
Var det forklaring nok, eller er der mere du er lidt usikker på?
nielle: jeg har lige et spørgsmål (hvis det ikke gør noget :). Hvad laver det spørgsmålstegn efter ".*" ? jeg er udmærket klar over at .* betyder hvilket som helst tegn optræder 0 eller flere gange. Det virker og giver mening i sig selv, men hvad med ? (som jo betyder might/might not.. agtigt)
> Jeg kan simpelhen ikke få 16/06-2006 19:20:40 til at virke.
Hmmm, mystisk.
> Den med $1, bruges det kun på preg_replace, eller burde det også virke på match?
Nej, $1 er noget noget sludder i forbindelse med match.
> nielle: jeg har lige et spørgsmål (hvis det ikke gør noget :). Hvad laver det spørgsmålstegn efter ".*" ?
Spørg løs :^)
Normalt vil ".*" matche "nul eller flere tegn", men den vil gøre det "grådigt" (kaldes greedy matching), dvs. at den vil matche så meget som den kan komme til. Dette kan være et problem hvis der er flere ting som kan matches:
1000 tak til jer begge. Alt jeg mangler inde for programmering er regulære udtryk. Syntes det er noget hat at lære. Men tror jeg er ved at forstå det nu. 1000 tak
16/06-2006 19:51:05> Sidder faktisk med det program. Men jeg vil også gerne forstå lidt af det. Og kunne ikke rigtig lure den med at retunere en del af strengen. Men ellers et godt program
Måling - godt nok i C# i stedet for PHP - af 1.000.000 matchinger:
1) 5,7 sek 2) 9,0 sek
Og for mønsteret:
3) "/<a .*?>(.*?)<\/a>/i"
8,7 sek (men svingende op til 9,0 sek for mange af mine målinger).
Jeg gætter på at det er den lazy matching der skal på i "<a.*?>" som koster performance. Den undgås i hvertfald med "<a [^>]*>". Men det er kun et gæt.
nielle: Jeg tror du har helt ret i at det er måden hvorpå lazy matching fungerer som koster performance. Det fungerer åbenbart lidt på samme måde som greedy matching - bare forfra i stedet for bagfra (bagfra hvor den først matcher alt hvad den kan, finder ud af at næste led ikke matcher, tager så ét tegn mindre og prøver igen.. og igen.. og igen indtil der kommer et samlet match). Med [^>]* kan den jo bare tage tegn for tegn og sige: er det her tegn anderledes end >, så godt... agtigt ;)
det burde ikke være det, da ikke alle link har en title på. men har prøvet sådan her: preg_match("/<a [^>]* href=\"(.*?)\" [^>]*>.*?<\/a>/i", $sAHref, $aRes);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.