"Stig Nørgaard Jepsen" <stigen@mail.dk> wrote in message
news:3b680199$0$2563$edfadb0f@dspool01.news.tele.dk...
> > ereg("(www\.)?(.*)\.[^\.]+", $domain, $regs);
> > $stump = $regs[2];
> Hvor kan jeg læse noget om eregs?
> Den ereg-sætning du har lavet der, er tæt på volapyk for mig... :)
Det kan jeg godt forstå, "regular expressions" er ikke det nemmeste at lære,
ved at se på eksempler. :)
Kort kan jeg forklare hvad der sker. Vi deler lige strengen op i bidder:
(www\.)?
Betyder at der evt. kan være strengen "
www.". Der er skråstreg foran
punktum, fordi punktum er et special-tegn. Parentesen betyder at jeg samler
"www\." i en gruppe.
Spørgsmålstegnet betyder at det foregående (dvs. parentesen) skal være der
nul eller én gange.
(.*)
Som sagt er punktum et specialtegn. Det betyder "et eller andet tegn". Altså
en slags joker. I fx. dos og bash bruger man spørgsmålstegn til at vise det
samme.
Stjernen betyder "det foregående (punktummet) findes nul eller flere gange".
Dvs. ".*" betyder såmen bare "noget", og svarer til "*" i dos og bash.
Parentesen kommer vi til lidt senere... :)
\.[^\.]+
Først er det et punktum. Det er igen "escaped", da jeg mener et "rigtigt"
punktum, og ikke specialtegnet.
[^x] betyder "et tegn, der ikke er tegnet 'x'". [^\.] betyder altså "et
tegn, der ikke er et punktum.
Plusset betyder "én eller flere gange". [^\.]+ betyder altså "ét eller flere
tegn, men ingen punktummer".
Den sidste parameter i funktionen er valgfri, men her har vi brug for den.
Variablen "$regs" bliver til et array med præcis 10 elementer.
Element "0" er den del af "input", som bliver brugt. Her skulle det gerne
være det hele, selv om jeg ikke specifikt beder om dette. Hvis der er nogle
ekstra tegn før eller efter domænet (man overser tit fx. et mellemrum, når
man laver cut'n'paste i et gui) bliver de nok ignoreret. Det har jeg dog
ikke lige testet. :)
Element "1" er hvad der matchede med den første parentes. I dette tilfælle
"
www." eller "" (intet).
Element "2" er selvfølgelig hvad der matchede med anden parentes. Og dette
er så "vinderen". :)
Her er lige lidt om regular expressions for begyndere:
http://mbn.dk/PHP/regex/
http://php.dk/artikler/regex.php
http://phpbuilder.com/columns/dario19990616.php3
Husk, regular expressions ER ikke nemt. :)
Nogle kommer hurtigt i gang med noget simpelt regexp, andre skal tygge på
det længe før de fatter noget som helst.
Avanceret regexp er en hel videnskab, og der er skrevet tykke bøger om det!
En af de mest roste/omtale er "Mastering Regular Expressions" fra O'Reiley.
(Håber jeg husker rigtigt, også med stavning.)
Mvh.
Niels Andersen