In hoeverre is dat anders van wat ik doe? Het is wat.... duidelijker.quote:Op donderdag 15 juli 2004 21:33 schreef Light het volgende:
Hij kan nog beter, bedenk ik me
$invoer = preg_replace("/(www\..*)(\s|$|\[)/Ui",'<a href="http://\1" rel="external">\1</a>\2',$invoer);
Dan nemen we alles dat begint met www. (let op die punt) tot aan de eerste spatie, $-teken of blokhaak openen.
Ik zit nog met twee probleempjes mbt de regexp's.quote:$invoer = preg_replace("/([a-z0-9._-]*@.*?)(\s|$|\[)/i",'<a href="mailto:\1">\1</a>\2',$invoer);
Die U maakt de expressie ungreedy. Standaard is een expressie greedy, dwz hij werkt volgens het principe "pakken wat je pakken kan". En dat merk je vooral bij die *. Als die ungreedy is dan pakt het sterretje tot het eerste teken dat de rest van de expressie accepteeert.quote:Op donderdag 15 juli 2004 21:37 schreef Swetsenegger het volgende:
[..]
In hoeverre is dat anders van wat ik doe? Het is wat.... duidelijker.
Wat doet die U ook alweer?
-edit-
This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) modifier setting within the pattern.
wtf?
Ik heb enige ervaringquote:Op donderdag 15 juli 2004 21:49 schreef Swetsenegger het volgende:
Light, hoe lang PHP jij al?
dit ga ik nog even langzaam lezen.quote:Op donderdag 15 juli 2004 21:54 schreef Light het volgende:
[..]
Die U maakt de expressie ungreedy. Standaard is een expressie greedy, dwz hij werkt volgens het principe "pakken wat je pakken kan". En dat merk je vooral bij die *. Als die ungreedy is dan pakt het sterretje tot het eerste teken dat de rest van de expressie accepteeert.
Voorbeeld: Als je [.b]1[./b]2[.b]3[./b] greedy gaat verwerken dan krijg je het hele stuk "1[./b]2[.b]3" bold. Bij ungreedy worden alleen de 1 en de 3 bold gegeven, zoals de bedoeling is.
Ja, ik had ff verder nagedacht en begreep het alquote:En het verschil tussen www*.* en www\..* is eigenlijk heel logisch. De eerste pakt ww, gevolgd door 0 of meer w's, gevolgd door nul of meer willekeurige tekens. De tweede pakt www, gevolgd door een punt (vandaar die \.), gevolgd door 0 of meer willekeurige tekens. En ww.123swets.com is geen geldige url, die hoef je ook niet als zodanig te parsen. wwww.123swets.com ook niet. Maar www*.* vindt ze allebei prima
Ik heb dit nuquote:Op donderdag 15 juli 2004 22:01 schreef Light het volgende:
Trouwens, aan die url parser kan nog wel het een en ander verbeterd worden. Maar ik stoe eerst even met dat mailadres ding
Ik vond al dat ik aardig ver gekomen wasquote:Op donderdag 15 juli 2004 21:57 schreef Light het volgende:
[..]
Ik heb enige ervaring
En reguliere expressies zijn leuk om mee te spelen
Kan je onderhand dat laatste stuk niet veranderen in een expressie die zegt:quote:Op donderdag 15 juli 2004 22:04 schreef Swetsenegger het volgende:
[..]
Ik heb dit nu
$uitvoer = preg_replace("/(www\..*)(\s|$|\[|\]|<|>|!|\?|&|\*|\(|\)|\")/Ui",'<a href="http://\1" rel="external">\1</a>\2',$uitvoer);
*denkt*quote:Op donderdag 15 juli 2004 22:14 schreef Roönaän het volgende:
[..]
Kan je onderhand dat laatste stuk niet veranderen in een expressie die zegt:
totdat ik een andere karakter tegenkom dan wat wel mag
*mompelt* wat was het verschil ook alweerquote:Voor ereg-replace zou dat laatste stuk ([^A-Za-z0-9~.\\/]zijn maar ik weet niet wat de pregversie daarvan is.
voor de apestaart 1 maal de normale karakters plus . - en _ dan een apestaart dan weer alle normale karakters 1 of meer keer en een puntplus alle normale karakters nog 1 keerquote:Op donderdag 15 juli 2004 22:28 schreef Light het volgende:
Is dit wat?
$invoer = preg_replace("/([A-Za-z0-9._-]+@[-A-Za-z0-9]+(\.[-A-Za-z0-9]+)*)/i",'<a href="mailto:\1">\1</a>',$invoer);
LEUK?!?!quote:Op donderdag 15 juli 2004 21:57 schreef Light het volgende:
[..]
Ik heb enige ervaring
En reguliere expressies zijn leuk om mee te spelen
Het is wel hoofdpijn code jaquote:Op donderdag 15 juli 2004 22:34 schreef mschol het volgende:
[..]
LEUK?!?!
ik heb een hekel aan die dingen (maar denk dat het komt omdat ik die engelse uitleg niet snap..)
heb jij toevallifg een goede nederlandse uitleg over rexexp in php???
Op een vergelijkbare manierquote:Op donderdag 15 juli 2004 22:14 schreef Roönaän het volgende:
Voor ereg-replace zou dat laatste stuk ([^A-Za-z0-9~.\\/]* ) zijn maar ik weet niet wat de pregversie daarvan is.
En een + betekent ten minste 1 maal, zoals een * ten minste 0 maal betekent. Dus na de apestaart staat ten minste een letter, cijfer of -, dan ten minste 1 keer een punt gevolgd door weer een letter/cijfer/-quote:Op donderdag 15 juli 2004 22:32 schreef Swetsenegger het volgende:
[..]
voor de apestaart 1 maal de normale karakters plus . - en _ dan een apestaart dan weer alle normale karakters 1 of meer keer en een puntplus alle normale karakters nog 1 keer
Dat wordt dan ook vertaald naar een mailadres. Inclusief die 09, dus een werkend adres wordt het niet.quote:wat doet jeroen@123swets.com09 in dit geval?
Nee, ik moet me ook zien te redden met de engelse.quote:Op donderdag 15 juli 2004 22:34 schreef mschol het volgende:
heb jij toevallifg een goede nederlandse uitleg over rexexp in php???
Dat doet mijn code ook bedenk ik me nu.quote:Op donderdag 15 juli 2004 22:47 schreef Light het volgende:
]Dat wordt dan ook vertaald naar een mailadres. Inclusief die 09, dus een werkend adres wordt het niet.
Deze niet:quote:Op donderdag 15 juli 2004 22:52 schreef Swetsenegger het volgende:
[..]
Dat doet mijn code ook bedenk ik me nu.
Graag gedaanquote:Tis ondertussen te laat voor diepzinnige regexp overpeinzingen
Bedankt voor je hulp!
oe... dat vetgedrukte ontgaat me nu ff...quote:Op donderdag 15 juli 2004 22:55 schreef Light het volgende:
[..]
Deze niet:
$invoer = preg_replace("/([A-Za-z0-9._-]+@[-A-Za-z0-9]+(\.[-A-Za-z0-9]+)*\.[A-Za-z]{2,4})/i",'<a href="mailto:\1">\1</a>',$invoer);
Dan zou het misgaan als er na de apestaart iets staat als mail.123swets.comquote:Op donderdag 15 juli 2004 22:52 schreef Swetsenegger het volgende:
-edit- maar als je na die punt na de apestaart de cijfercombo weglaat klopt het wel
Daarmee dwing je af dat er na de laatste punt in het mail adres 2 t/m 4 letters volgen. Geen cijfers of andere vreemde tekens, alleen letters. Da's dus voor het top level domain, als .nl, .com of .info.quote:Op donderdag 15 juli 2004 22:57 schreef Swetsenegger het volgende:
[..]
oe... dat vetgedrukte ontgaat me nu ff...
Morgen
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |