Reguláris kifejezések

A reguláris kifejezések szerepe igen jelentős az átirányítások alkalmazása során. Idézzük fel még egyszer az előző fejezetből, hogyan is írunk meg egy konkrét átirányítást:

RewriteRule ^index2\.html$ index1.html
RewriteRule ^index3\.html$ index1.html [R]

Az átirányított index2.html megadásakor 3 furcsaságot is találtunk:

^ jel az index2.html előtt
$ jel az index2.html után
\ jel a pont előtt

Ezen jeleknek speciális jelentése van. A ^ jelzi az "illesztendő" kifejezés elejét, a $ a végét, a \ pedig azért kell, mert a pontnak van egy olyan speciális jelentése, hogy ha nincs előtte \ , akkor rá minden karakter illeszkedik.

Nézzünk ezt konkrét példán keresztül. Az átírások és átirányítások fejezetben megadott, ide is bemásolt két linken a fenti módon állítottuk be az átirányítást.

/redirect1/index2.html
/redirect1/index3.html

Egy másik könyvtárban ugyanezt a \, $ és ^ jelek nélkül, az alábbiak szerint állítottam be:

RewriteRule index2.html index1.html
RewriteRule index3.html index1.html [R]

Ellenőrizzük le, hogy működik-e így is az átirányítás!

/redirect3/index2.html

Ha megnyitottuk a linket, azt tapasztaljuk, hogyz is működik, ugyanúgy az index1.html-t nyitja meg, úgyhogy elsőre úgy tűnhet, hogy minden ugyanaz. Biztos, hogy ugyanaz? Ellenőrizzük le egy kicsit másképp!

/redirect1/ujindex2.html
/redirect3/ujindex2.html

Hoppá, itt már eltérés van! Ha nem pontosan index2.html-t írunk be, hanem az elejére teszunk valamit, es ujindex2.html-t írunk be, akkor az első esetben nincs átírás, és nem létező hibára fut a link, a második esetben viszont van, megtörténik az átirányítás. Az ilyen jellegű átirányítás sokszor szándékos, de sokszor úgy is előfordul, hogy egyáltalán nem ez volt a cél. Ezért mindenképp figyeljünk arra, hogy pontosan azt adjuk meg, ami a cél!

Fontosabb reguláris kifejezés szabályok

Az átirányítások szempontjából a legfontosabb szabályok:

KifejezésJelentésPélda
^kifejezés kezdete^nap - minden nap-pal kezdődő szó, pl. nap, napos, nap123 stb.
$kifejezés végema$ - minden ma-val végződő szó, pl. ma, mama, jatszma, ima stb. stb.
+Előtte levő karakter vagy zárójeles kifejezés legalább egyszeralma1+ - Ennek pl. megfelel az alma1, alma11, alma111111, de nem felel meg az alma, alma113
*Előző karakter vagy zárójeles kifejezés legalább nullaszoralma1* - Ennek pl. megfelel az alma, alma1, alma11, alma111111, de nem felel meg az alma2, alma113
?Előző karakter vagy zárójeles kifejezés pontosan 0 vagy 1 alkalommalalma1? - Ennek megfelel az alma és az alma1, semmi más nem
.Bármilyen karakter, 1 darabs.kk - Ennek megfelel pl. a sakk, sekk, sokk, swkk, s7kk
\Védőkarakter, az utána jövő karakter normál módon viselkedik A \* felel meg a * karakternek. Ha \ nélkül használnánk, akkor a fentebb írt speciális jelentése lenne.
A \\ felel meg egy darab \ karakternek
( )1. Karakterek egységként kezelése
2. Változóba mentés
(ma). - A "ma"-ra vonatkozik, hogy minimum egyszer létezik, azaz megfelel neki a ma, mama, mamama, mamamamamama, stb.
[ ]Egy darab karakter a felsorolt karakterosztályból[123] - 1, 2 vagy 3 karakterek egyike
[A-Za-z0-9_] - az angol abc kis és nagybetűi, a számjegyek és az aláhúzás karakter
-[]-en belül, ha mindkét oldalán van karakter, tartomány a - két oldalán lévő értékek között[A-Za-z] - az angol abc kis és nagybetűi
^[]-en belül negálás, a mögötte megadott adatok inverze[^0-9] - Bármilyen karakter, kivéve a számjegyeket
[*+?.][]-en belül az egyébként speciális karakterek saját magukat jelentik[*+?.] - Egy darab tetszőleges karakter a * + ? . közül

A reguláris kifejezéseknek nagy irodalma és igen kiterjedt használata van. A fenti alapszabályokkal rendkívül bonyolult kereső kifejezéseket is létre lehet hozni. Ha mélyebben érdekel a téma, az interneten rengeteg ezzel foglalkozó szakirodalmat lehet találni, de nekünk egyelőre elég a fentiek ismerete.