Door
GreatSlovakia
op 30-12-2005 19:31
gewijzigd op 30-12-2005 19:33
3.273 views
Ik heb de volgende regex samengestelt welke er voor zorgt dat alfa, beta of gamma wordt verplaatst door Delta, dus:
preg_replace("#(alfa|beta|gamma)?#"," Delta ", $var);
Nu wil ik er voor zorgen dat ook aLfa, ALfa, ALFA ect. kan worden opgemerkt.
P.S. Bij mijn script staat er nog veel meer in wat ik hier niet heb gekopieert aangezien dat het alleen 10x zo moeilijk zou maken.
Ik heb ook het idee dat de originele code
preg_replace("#(alfa|beta|gamma)?#"," Delta ", $var);
niet gaat werken.
Die vervangt, voor zover ik het zie, alle afzonderlijke letters door Delta.
In principe wordt een regexp omsloten door //, maar als dat niet handig is, kun je in principe elk niet-alfanumeriek karakter als delimiter gebruiken (backslash uitgezonderd). De regexp engine merkt vanzelf dat je een andere delimiter gebruikt en zal zijn gedrag daaraan aanpassen.
Denk aan een regexp waarin je het pad /usr/bin/ moet vervangen door /usr/local/bin/:
Het is helemaal geen vreemd resultaat, als je tenminste weet hoe een regexp werkt ;-)
In de eerste regexp staat (even vereenvoudigd)
/(alfa)?/i
Dat betekent: match de groep indien die 0 of 1 keer voorkomt. Aangezien de hele regexp dus optioneel is, matcht hij na elk karakter in de invoerstring.
Eigenlijk zou ik verwachten dat hij dit slechts 1x doet, aangezien er geen /g modifier is opgegeven (oftewel: dit gedrag zou ik verwachten bij /(alfa)?/ig) maar blijkbaar is dit een punt waarop PCRE net iets anders werkt dan "gewone" RE.