knuto Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 God ettermiddag! Å lage regulæruttrykk er ei av mine særs svake sider, og nok ein gong spør eg om hjelp. Eg kunne trengt eit uttrykk for å validere ei linje. Linja skal bestå av to delar med kva som helst, separert med =. Det skal gå an å bruka = i begge dei to delane, men då skal det vera ein backslash framfor (\=). Den neste skal skilja dei to delane frå kvarandre (med preg_split). Eksempeloppgåvar: home=heim yes=ja main-intro-header=Velkommen! main-intro=Velkommen til xxx. Logg inn nedanfor. Bruk \=\=\= for å sjekka demoen Som de forstår er det for å laga ei språkfil. Lenke til kommentar
Jonhoo Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 (endret) Trenger du preg_ til dette da? Ska me sjå: <?php //Lager en funksjon til å fikse på det ene = tegnet function replaceequals($str) { return str_replace('=', 'THISISTHEMIDDLEEQUALSIGN', $str); } //Fjerner alle \= og lager en array $splitted = explode('\=', $string); //Bytter ut rene = tegn i arrayen med teksten i funksjonen over array_map("replaceequals", $splitted); //Slår sammen arrayen så = tegn blir vanlige (Uten \ ) $together = implode('=', $splitted); //deler opp $together der hvor det originale ene = tegnet var $beforeafter = explode('THISISTHEMIDDLEEQUALSIGN', $together); //Setter variablene til det før (0) og det etter (1) = tegnet $beforequal = $beforeafter[0]; $afterequal = $beforeafter[1]; ?> Endret 13. juni 2006 av Jonhoo Lenke til kommentar
Peter Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 preg_split('/(?<!\\)=/', $linje) Lenke til kommentar
knuto Skrevet 13. juni 2006 Forfatter Del Skrevet 13. juni 2006 Hmm. Vil ein spara noko på å unngå preg her? Den array-behandlinga der må då minst vera lika treig. Får sjå kva eg vel. Lenke til kommentar
Peter Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 Tja, synes ihvertfall koden min var enklere. Vet ikke hvilken som er raskest, men nå har du jo fått begge kodene, så kanskje du vil gjøre oss den tjenesten å teste? Lenke til kommentar
Jonhoo Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 Tips: Bruk microtime(true) før og etter og trekk den store fra den lille og rundt av resultatet Nazgul, hadde du giddet å forklare RegExpen din? Så nå at jeg ikke kunne så mye som jeg trodde om det ^^ Lenke til kommentar
Peter Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 (endret) Tips: Bruk microtime(true) før og etter og trekk den store fra den lille og rundt av resultatet Nazgul, hadde du giddet å forklare RegExpen din? Så nå at jeg ikke kunne så mye som jeg trodde om det ^^ 6300756[/snapback] preg_split('/(?<!\\)=/', $linje) 6300565[/snapback] Betyr kort og godt match alle '=' som ikke har en backslash foran seg. (?<!\\)= betyr match '=' som _ikke_ har \\ (slash) foran seg (\=) (?<=\\)= betyr match '=' som har \\ (slash) foran seg I tillegg har du (?=\\)= betyr match alle '=' som har påfølgende slash ( =\) (?!\\)= betyr match alle '=' som _ikke_ har påfølgende slash Endret 13. juni 2006 av Nazgul Lenke til kommentar
Jonhoo Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 Men så hva betyr ?<= og ?= Skjønner at ! betyr ikke og = betyr at det skal være der, men hvorfor spørsmålstegnet og < ? Lenke til kommentar
Peter Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 (endret) Det er regex-konstruksjonen som er slik. ?! ?= ?<! ?<= Disse kan regnes som én modifier, som f.eks. ^ Endret 13. juni 2006 av Nazgul Lenke til kommentar
Peter Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 (endret) "De" er en konstruksjon, de betyr noe annet når de står for seg selv. ?! betyr "ikke etter" ?= betyr "etter" ?<! betyr "ikke før" ?<= betyr "før" spørsmålstegnet kan ses på som et slags escape-tegn, i tillegg til det mer vanlige backslash (\) Jeg klarer ikke å forklare bedre. Du må nesten bare se på postene over. Endret 13. juni 2006 av Nazgul Lenke til kommentar
Jonhoo Skrevet 13. juni 2006 Del Skrevet 13. juni 2006 Skjønte det nå, ville bare ha en beskrivelse av nettopp det du skrev over Takker og bukker Lenke til kommentar
knuto Skrevet 14. juni 2006 Forfatter Del Skrevet 14. juni 2006 (endret) Nazqul: Vil ikkje '/[^\\\]=/' virka lika godt som '/(?<!\\)=/', bare ikkje så IQ-sperra? edit: Din løysing er den einaste som lar seg gjera med preg_split Endret 14. juni 2006 av knuto Lenke til kommentar
Torbjørn Skrevet 14. juni 2006 Del Skrevet 14. juni 2006 http://perldoc.perl.org/perlre.html se her for en god referanse. ca halvveis ned på siden finner du mye av det som Nazgul bruker. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå