Introduktion til Regular Expressions!

 

Regular Expressions er et meget nyttigt værktøj. Det er egnet til at finde og evt. erstatte sætninger el. lign. ud fra nogle regler du selv opstiller.

Her skal lige nævnes at det her kræver du kender en smule til PHP i forvejen. Princippet i regular expressions er meget enkel, men du kan hurtig lave dem umådelig komplekse.

Lad os nu sige at du vil finde alle ord i et array der starter med 'A' (ikke 'a'), vi laver en lille stump kode og lægger det i en fil kaldet ereg_test.php3 eller noget i den stil.


<?
$array=array("Abe","abe","Abc","abc11",
"HEST", "hest", "bAnan","1234");


$i=0;
$cnt=count($array);


echo "regular
expression test:";

while ($i < $cnt)
{
if (ereg("^A", $array[$i]))
{
echo "$i : $array[$i]
<BR>";
}
$i++;
}
?>




Det skulle gerne give følgende output i din browser:
0 : Abe
2 : Abc



'^' tegnet betyder begyndelsen af linjen. Hvis istedet man vil finde alle der *indeholder* 'A' skal man (ja du gættede rigtigt) fjerne '^'.

dette output skulle nu gerne vise sig:

0 :
Abe
2 : Abc
6 : bAnan



Lad os nu sige at du egentlig er lige glad med om der er upper case el. lower case (A el. a), så ændrer du bare IF linjen:

if (eregi("a",
$array[$i])) {



output bliver:

0 :
Abe
1 : abe
2 : Abc
3 : abc
6 : bAnan



Det 'i' der blev tilføjet står for case in-sensetive, hvilket kort fortalt at den ikke skelner mellem store og små bogstaver. Det var jo meget simpelt, ikke?

Lad os nu sige du vil finde alle strenge der indeholder tal... vi ændrer linjen i vores lille program:

if (ereg("[0-9]", $array[$i])) {


# Finder alle strenge med tal fra 0-9...

selvfølgelig stopper legen ikke her, ting som wildcards kan også bruges:

if
(ereg("^.*", $array[$i])) {


# Finder alle strenge.

Hvad så med erstat?

$array[$i] =
ereg_replace("a", "q", $array[$i]);



prøv eventuelt at kombinere den her med den stump kode du fik i starten. Du kan eventuelt smide den ind i if løkken:

while ($i <
$cnt) {
if (ereg("^A", $array[$i]))
{
$array[$i]=ereg_replace("[0-9]", " tal",
$array[$i]);
echo "$i :
$array[$i]";
}
$i++;
}
        



Flere eksempler:
"[ \t]+$" finder mellemrum eller tabulator i slutningen af linjen. ('\' tegnet bruges til at escape, ellers havde den fundet 't' istedet, andre eksempler er '\n' (finder en newline))

"^$" finder alle tomme linjer (du må så forhåbenligt have gættet at '$' betyder slutningen af linjen)

"^.{4}$" finder alle strenge der indeholder 4 karakterer.

"^a|^b|[0-9]$" finder alle der starter med 'a' eller 'b' eller en linje der slutter på tal. Her har vi gjort brug af Booleans.

Som du kan se kan det hurtigt blive en smule komplekst, men opgiv ikke, kender du først de grundlæggende funktioner, lærer du lynhurtigt at konstruere endnu mere komplekse sætninger. Der er masser af eksempler på nettet, så det er bare at komme igang.



Skrevet af: Martin Krøis | Dato : 2000-02-15 | Læst : 7738 gange