next up previous index
Következő: 15.52.6 DIAGNOSZTIKA Fel: 15.52 grep(1) Előző: 15.52.4 OPCIÓK   Index

15.52.5 SZABÁLYOSKIFEJEZÉSEK (REGULAR EXPRESSIONS)

A szabályos kifejezés egy minta, amely a stringeknek egy halmazát írja le. A szabályos kifejezések az aritmetikai kifejezésekhez hasonlóan konstruálhatók, azaz különböző operátorokkal kisebb kifejezésekből építhetők fel.

Grep kétféle változatát érti a szabályos kifejezések nyelvtanának (syntax): az ``alap'' (basic) és a ``bővített'' (extended) változatot. A GNU grep-ben nincs különbség a kétféle nyelvtan által elérhető funkciókban. Más megvalósításokban az alap szabályos kifejezések kevésbé hatékonyak. A következő leírás a bővített szabályos kifejezésekre vonatkozik; az alap reguláris kifejezéseknek ettől való különbségeit ezután összegezzük.

Az elemi építőkövek olyan szabályos kifejezések, melyek egyetlen karakterhez illeszkednek. A legtöbb karakter (pl. a betűk és a számok) szabályos kifejezések, melyek önmagukhoz illeszkednek. A speciális jelentéssel rendelkező metakarakterek (pl. a ., *, [ karakterek) elé backslash-t kell írni, hogy speciális jelentésük helyett a karakterhez való illeszkedést vizsgálhassuk. (Pl. a mintában levő fog illeszkedik a szövegbeli nyitó szögletes zárójellel.)

A [ és ] jelek közé írt karakterlista illeszkedik a listában szereplő bármely karakterhez. Amennyiben a lista a ^ jellel kezdődik, az illeszkedés a listában nem szereplő karakterekkel áll fenn. Például a [0123456789] szabályos kifejezés bármely számjegyhez illeszkedik.

ASCII karakterek tartománya az első és utolsó karakterek megadásával adható meg, ha ezeket `-' jel választja el. (Pl. [a-f] ugyanaz, mint [abcdef].) Végül a karakterek néhány speciális osztálya előre definiált névvel rendelkezik. (Ezen nevek jelentése angolul magától értetődő, itt kifejtjük őket.)

[:alnum:]
betű vagy szám
[:alpha:]
betű
[:cntrl:]
vezérlőkarakter
[:digit:]
számjegy
[:graph:]
grafikus karakter
[:lower:]
kisbetű
[:print:]
nyomtatható karakter
[:punct:]
elválasztó, központozó jel (.,;?!)
[:space:]
szóköz
[:upper:]
nagybetű
[:xdigit:]
hexadecimális szám

Például [[:alnum:]] jelentése: [0-9A-Za-z], azzal a kitétellel, hogy az utóbbi forma az ASCII kódolástól függ, míg az előbbi nem, így átvihető. (Megjegyzés: ezen osztálynevekben szereplő zárójelek a szimbolikus nevek részei, és a zárójeles listákat határoló zárójelek mellett ezeket is megkell adni.)

A legtöbb metakarakter elveszti speciális jelentését egy listán belül. Egy ] jelet a minta első elemeként szerepeltetve csatolhatunk a listához. Hasonlóan a ^ jel az első kivételével bármely helyre kerülve a `^' jelet fogja jelenteni. Végül a `-' jelet a lista utolsó elemeként kell írni, ha nem metakarakterként akarjuk értelmezni.

A pont (.) minden karakterhez illeszkedik. A \w szimbólum az [[:alnum:]] szinonímája, míg \W ugyanaz, mint [^[:alnum:]].

A ^ és a $ jelek metakarakterek, melyek rendre a sorkezdő és -záró üres stringekhez illeszkednek. Hasonlóan a \< és \> szimbólumok a szavak elejénél, illetve végénél található üres stringhez illeszkednek.

A \b a szóhatáron levő üres stringhez illeszkedik, míg \B a nem szóhatáron levő üres stringhez illeszkedik. Az egy karakterhez illeszkedő szabályos kifejezéseket a következő ismétlési operátorok egyike követheti:

?
Az előző tag opcionális, és legfeljebb egyszer illeszkedik.
*
Az előző tag nulla vagy több alkalommal illeszkedik.
+
Az előző tag egy vagy több alkalommal illeszkedik.
{n}
Az előző tag pontosan n alkalommal illeszkedik.
{n,}
Az előző tag n vagy több alkalommal illeszkedik.
{,m}
Az előző tag legfeljebb m alkalommal illeszkedik.
{n,m}
Az előző tag legalább n de legfeljebb m alkalommal illeszkedik.

Két szabályos kifejezés összefűzhető; a kapott szabályos kifejezés minden olyan stringhez illeszkedik, amely a két szabályos kifejezéshez illeszkedő két részstringből állítható össze a sorrend megtartása mellett. Két szabályos kifejezés összekapcsolható a | infix operátorral; a kapott szabályos kifejezés minden stringhez illeszkedik, amelyikhez valamelyik részkifejezés illeszkedik.

Az ismétlés nagyobb precedenciájú, mint az összefűzés, ami viszont a választóoperátornál (azaz |-nál) nagyobb precedenciájú. Egy részkifejezés zárójelbe tehető, hogy felülbíráljuk a precedenciát.

A \n visszahivatkozást (backreference) jelöl, ahol n egy számjegy. Ez illeszkedik ahhoz a stringhez, amely a szabályos kifejezés ezt megelőző n­edik zárójeles alkifejezéshez illeszkedett. Az alap szabályos kifejezésekben a ?, +, {, |, (, és ) metakarakterek elvesztik speciális jelentésüket; helyettük a backslash­es változatukat kell használni: \?, \+, \{, \|, \(, és \). Az egrep programban a { metakarakter elveszti speciális jelentését, helyette a \{ használható.


next up previous index
Következő: 15.52.6 DIAGNOSZTIKA Fel: 15.52 grep(1) Előző: 15.52.4 OPCIÓK   Index

1999-09-17