Reguláris kifejezések referenciája röviden
Reguláris kifejezések a szövegek, adatok feldolgozására, minták alapján részhalmazok keresésére.
(Frissítve: 2011-01-04 15:14)
A reguláris kifejezés, egy szintaktikai szabályok szerint leírt
minta, amely segítségével szövegek, adatok feldolgozásakor, egyező
részhalmazok kereshetőek ki – karaktereket, számokat és helyettesítő
karaktereket tartalmaz. Először Unixon kezdték használni, rendkívüli
hatékonyságának köszönhetően mára szinte mindenik programozási nyelvbe
beépítették. A reguláris kifejezéseket a legtöbb programnyelv esetenként
eltérő saját beépített függvényekkel támogatja.
Megemlítendő, a különféle szabványoknak az ASCII kódoláson kívül eső
betűk mostoha kezelése. Gyakori probléma például, egy több byte-os
karakter (pl.: ékezetes betű) illeszkedése a mintában, az ékezetes
szavak ábécé szerinti rendezése. Hogyha a kifejezésben a karakterlánc
hossza is feltétel, a számlálás byte-onként balra tolódik, így az
elvárástól eltérő eredményre lehet számítani. A Perl-stílusú reguláris
kifejezések képesek az UTF–8 szövegek kezelésére.
Metakarakterek (Metacharacters)
- \
- (escape karakter) – az utána következő metakarakterre illeszkedik
pl.: "\*" csillag karakterre, "\\" visszaperjelre
- .
- (pont) – bármely, kivéve az új sor karakter
- ^
- (kalap jel) – a minta kezdete
- $
- (dollár jel) – a minta vége
- |
- (pipa) – logikai elágazás, előtte vagy utána levő kifejezés
- []
- (szögletes zárójel) – karakter osztály, a szögletes zárójelek
közötti karakterek valamelyikeire bármilyen sorrendben illeszkedik
- ()
- (kerek zárójel) – csoportosítás, a kerek zárójelek közötti
karakterekre pontos sorrendben illeszkedik
- [^ab@]
- (tagadás a karakter osztályban) – bármi, kivéve a, b vagy @
- [0-6]
- (karakter osztály tartomány) – 0 és 6 közötti számokra illeszkedik
- [a-fA-F]
- (karakter osztály tartomány) – ASCII kis és nagy betűkre
illeszkedik a-tól f-ig
Ismétlések (Quantifiers)
- *
- (csillag) – a minta 0 vagy többszöri ismétlése
- +
- (plusz) – a minta 1 vagy többszöri ismétlése
- ?
- (kérdőjel) – a minta 0 vagy egyszeri ismétlése
- {3}
- (intervallum) – a mintában pontosan három karakter lehet
- {3,}
- (intervallum) – a mintában legalább három vagy több karakter lehet
- {,3}
- (intervallum) – a mintában legfeljebb három karakter lehet
- {1,4}
- (intervallum) – a mintában legalább egy, legfeljebb négy karakter
lehet
Ismétlések lomhán (Quantifiers not greedily)
- *?
- (csillag és kérdőjel) – a minta 0 vagy többszöri ismétlése (lomhán)
- +?
- (plusz és kérdőjel) – a minta 1 vagy többszöri ismétlése (lomhán)
- ??
- (kérdőjel és kérdőjel) – a minta 0 vagy egyszeri ismétlése (lomhán)
- {3}?
- (intervallum és kérdőjel) – a mintában pontosan három karakter
lehet (lomhán)
- {3,}?
- (intervallum és kérdőjel) – a mintában legalább három vagy több
karakter lehet (lomhán)
- {,3}?
- (intervallum és kérdőjel) – a mintában legfeljebb három karakter
lehet (lomhán)
- {1,4}?
- (intervallum és kérdőjel) – a mintában legalább egy, legfeljebb
négy karakter lehet (lomhán)
Ismétlések visszatérés nélkül (Quantifiers give nothing back)
- *+
- (csillag és plusz) – a minta 0 vagy többszöri ismétlése
(visszatérés nélkül)
- ++
- (plusz és plusz) – a minta 1 vagy többszöri ismétlése (visszatérés
nélkül)
- ?+
- (kérdőjel és plusz) – a minta 0 vagy egyszeri ismétlése
(visszatérés nélkül)
- {3}+
- (intervallum és plusz) – a mintában pontosan három karakter lehet
(visszatérés nélkül)
- {3,}+
- (intervallum és plusz) – a mintában legalább három vagy több
karakter lehet (visszatérés nélkül)
- {,3}+
- (intervallum és plusz) – a mintában legfeljebb három karakter lehet
(visszatérés nélkül
- {1,4}+
- (intervallum és plusz) – a mintában legalább egy, legfeljebb négy
karakter lehet (visszatérés nélkül)
Escape-szekvenciák (Escape sequences)
- \t
- (HT, TAB) – tabulátor
- \v
- (VT, TAB) – vertikális tabulátor
- \n
- (LF, NL) – új sor
- \r
- (CR) – kocsi vissza
- \a
- (BEL) – csengő
- \f
- (FF) – lapdobás
- \e
- (ESC) – escape
Általános karakter osztályok (Generic Character Classes)
- \d
- decimális szám
- \D
- nem decimális szám, minden más
- \s
- szóköz karakter
- \S
- bármely más karakter a szóközön kívül
- \w
- bármely szó
- \W
- bármi, ami nem szó
Módosítók (Modifiers)
- m
- (PCRE_MULTILINE) – a "^" és "$" közötti több soros karakterlánc
kezelése, belső sorokra illeszkedik
- i
- (PCRE_CASELESS) – kis és nagy betű érzékenység kikapcsolása
- s
- (PCRE_DOTALL) – csak egy sorra illeszkedik
- x
- (PCRE_EXTENDED) – szóközök és megjegyzések figyelmen kívül hagyása
a mintában
- e
- a preg_replace() csereláncát PHP-kódként kezeli
- g
- minden előfordulásra illeszkedik
- u
- (PCRE_UTF8) – a mintát UTF–8 kódolású szövegnek tekinti
- A
- csak a karakterlánc elején illeszkedik (PHP)
- E
- csak a karakterlánc végén illeszkedik (PHP)
- U
- a legkevesebb karaktert tartalmazó találatokat adja vissza (PHP)
Feltételek (Assertions)
- \b
- szóhatár
- \B
- bármi, kivéve szóhatár
- \A
- csak a karakterlánc elején egyezik
- \Z
- csak a karakterlánc vagy újsor végén egyezik
- \z
- csak a karakterlánc végén egyezik
Másodlagos feltételek (Subassertions)
- (?:bab)
- (nem emlékező zárójel) – illeszkedik a bab-ra, de nem emlékezik az
illesztésre
- bab(?=szem)
- illeszkedik a bab-ra, ha azt a szem követi
- bab(?!szem)
- illeszkedik a bab-ra, ha azt nem a szem követi
- (?#ez itt egy megjegyzés)
- (megjegyzés)
- (?>\d+)bab
- teljesítmény növelés, ha a bab hiányzik
- (?(3)bab|szem)jankó
- illeszkedik a bab-ra, ha a harmadik rész egyezik, különben a
szem-re
Posix, Unicode, Perl, ASCII karakter osztályok
| Posix |
Unicode |
Perl |
ASCII |
| betűk és számok |
| [:alnum:] |
\p{IsAlnum} |
|
[a-zA-Z0-9] |
| betűk |
| [:alpha:] |
\p{IsAlpha} |
|
[a-zA-Z] |
| 0 és 127 kódok közötti karakterek |
| [:ascii:] |
\p{IsASCII} |
|
|
| szóköz vagy tabulátor |
| [:blank:] |
|
|
[ \t] |
| ellenőrző karakterek |
| [:cntrl:] |
\p{IsCntrl} |
|
[\x00-\x1F\x7F] |
| decimális számok |
| [:digit:] |
\p{IsDigit} |
\d |
[0-9] |
| nem decimális számok |
|
|
\D |
[^0-9] |
| nyomtatható karakterek, kivéve szóköz |
| [:graph:] |
\p{IsGraph} |
|
[\x21-\x7E] |
| nyomtatható karakterek és szóköz |
| [:print:] |
\p{IsPrint} |
|
[\x20-\x7E] |
| nyomtatható karakterek, kivéve betűk és számok |
| [:punct:] |
\p{IsPunct} |
|
[-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~] |
| szóköz |
| [:space:] |
\p{IsSpace} |
\s |
[ \t\r\n\v\f] |
| szóköz (perl) |
|
\p{IsSpacePerl} |
\s |
|
| nem szóköz |
|
|
\S |
[^\s] |
| szó |
| [:word:] |
\p{IsWord} |
\w |
[A-Za-z0-9_] |
| nem szó |
|
|
\W |
[^\w] |
| hexadecimális szám |
| [:xdigit:] |
\p{IsXDigit} |
|
[A-Fa-f0-9] |
| kisbetűk |
| [:lower:] |
\p{IsLower} |
|
[a-z] |
| nagybetűk |
| [:upper:] |
\p{IsUpper} |
|
[A-Z] |
PHP reguláris kifejezések függvényei
A PHP a reguláris kifejezések két fajtáját támogatja, a POSIX- és a
Perl-kompatibiliseket.
POSIX függvények
A PHP az 5.3.0 verzió bevezetésével a POSIX függvényekre
„Deprecated: Function ereg() is deprecated…”
elavultságot jelző hibaüzenetet ad! A kódot Perl-kompatibilissá kell
konvertálni.
- ereg()
- egyezés vizsgálata
- eregi()
- egyezés vizsgálata (kis és nagy betű érzéketlen)
- ereg_replace()
- az egyezést a megadott szóra cseréli
- eregi_replace()
- az egyezést a megadott szóra cseréli (kis és nagy betű érzéketlen)
- split()
- az egyezés alapján a karakterláncot tömb elemekre darabolja
- spliti()
- az egyezés alapján a karakterláncot tömb elemekre darabolja (kis és
nagy betű érzéketlen)
Perl-kompatibilis függvények
- preg_filter
- keresés és csere
- preg_match()
- egyezés vizsgálata
- preg_match_all()
- egyezés vizsgálata globálisan (az első egyezés után folytatja a
keresést)
- preg_replace()
- az egyezést a megadott szóra cseréli
- preg_replace_callback()
- az egyezést a megadott függvényt meghívásával cseréli
- preg_split()
- az egyezés alapján a karakterláncot tömb elemekre darabolja
- preg_quote()
- az egyezés metakaraktereit literálissá változtatja
- preg_grep()
- visszaadja azokat a tömbelemeket, amelyek illeszkednek a mintára
Egyéb internetes források