Gå til innhold

Hjelp til to regulæruttrykk (preg, ikkje ereg)


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Jonhoo
Lenke til kommentar
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 av Nazgul
Lenke til kommentar

"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 av Nazgul
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...