Reguláris
kifejezés
- [a-z] : a lokális
beállításoktól függ a karakterek
sorrendje, hogy lehet-e nagybetû, stb.
Példa:
man
egrep > egrep.txt
tele van furcsa karakterekkel, a man jelölésében a
karakter vissza (
^H)
karakter megismétlés jelenti a kiemelést a
_^H az
aláhúzást. Ezek eltüntetése:
%s/.^v^h//g
.
Kiterjesztett reguláris kifejezés
Példa: az egrep parancs:
A kiterjesztett reguláris kifejezés (egrep) tartalmazza a
reguláris kifejezéseket , és
- metakarakterek
elveszítik jelentésüket a [] között: []$&%^-]
- legelsõ ]
jelenti a ] jelet (nem
lezárás)
- nem elsõ ^
jelenti a ^ jelet (nem
szó eleje)
- utolsó -
jelenti a - jelet (nem
tartomány)
- \n : n szám az n. egyezés
extrák:
- csoportok:
- [:alnum:]
[0-9A-Za-z]
- [:alpha:]
[A-Za-z]
- [:cntrl:]
kontroll karakterek, a [:upper:], [:lower:], [:alpha:], [:digit:],
[:punct:], [:graph:], [:print:], vagy [:xdigit:]
osztályokba nem sorolható karakterek.
- [:digit:]
számjegyek
- [:graph:]
grafikus karakterek
- [:lower:] kisbetűs
karakterek
- [:print:]
nyomtatható karakterek (kivéve a [:space:]
osztályt)
- [:punct:]
írásjelek: ! ' # S %
& ` ( ) * + , - . / : ; < = > ? @ [ / ] ^ _ { | } ~
- [:space:]
szóköz karakterek (szóköz, tab, újsor,
cr, ff)
- [:upper:]
nagybetűs karakterek
- [:xdigit:]
[0-9A-Fa-f] (hexadecimális karakter)
függetlenek a
locale beállításoktól és az ASCII
kódtáblától.
A szögletes
zárójelek az osztályelnevezés részei
így a keresésben duplán jelenik meg a
szögletes zárójel:
egrep
'[[:digit:]]' file
egrep
'[][:digit:]$&]' file
\w : [[:alnum:]]
\W : [^[:alnum:]]
\b :
\< vagy \>
\B : üres, nem
szó eleji/végi
string ??? (lehet szó belseje is?)
- ismétlődés (a * jelen kívül)
- ?
: az
elõtte levõ karakter opcionális: egyszer vagy
nullaszor fordulhat elõ
- +
: az elõtte levõ
karakter legalább egyszer fordul elõ.
- {n}
: az
elõtte levõ karakter pontosan nszer
ismétlõdik
- {n,}
: az elõtte levõ karakter
legalább nszer
ismétlõdik
- {n,m}:
az elõtte
levõ karakter legalább nszer
de legfeljebb mszer
ismétlõdik
- | :
két reguláris
kifejezés vagylagos kombinációja
\bablak\b|\bajto\b
megkeresi, hogy hol fordul
elõ az
ajto vagy
ablak szó
magában.
- Az ismétlõdés
hamarabb értékelõdik ki, mint a reguláris
kifejezések összefûzése, mely viszont
megelõzi a |
mûveletet. Így a
kifejezés az ablak legalább egyszeri,
míg az ajto
legalább kétszeri elõfordulását
írja elõ. Az
(ajto)(ablak)|(ajto.*){2,}
viszont azt
követeli meg, hogy egy sorban az ajto-t
kövesse valahol az
ablak VAGY az ajto ketszer szerepeljen. A | az elõtte
levõ teljes kifejezést (reguláris
kifejezések összefûzése) kapcsolja össze
a mögötte álló reguláris
kifejezéssel.
- A zárójelekkel
megváltoztathatjuk a kiértékelési
sorrendet:
(ajto).*((ablak)|(ajto.*){2,})
az ajto
után
szerepeljen az ablak, vagy
két ajto string.
((ajto)|(ablak)).*\1
az ajto
vagy az ablak legalább
kétszeri elõfordulását írja
elõ.
- A kiterjesztett reguláris kifejezésekben ha a
? + * . { }
| ( ) ^ $ \
karaktereket keressük, akkor le
kell
õket védeni a \ jellel.
Míg egyszerû
reguláris kifejezésben a
\(ablak\)
kifejezés az
ablak stringet keresi,
és azt eltárolja, ugyanez
kiterjesztett reguláris kifejezésként a
zárójelekkel körbevett
ablak stringet keresi.
- Környezeti változók hatása
Alapesetben a
tartományok és karaktertípusok
kiértékelése az ASCII szekvencia alapján
történik (ez a C locale). Ha az
- LC_ALL, LC_COLLATE, LANG be
van állítva, akkor azok ebben a
kiértékelési sorrendben
megváltoztatják a tartományok
definícióját
- LC_ALL, LC_CTYPE, LANG a karakterek
típusát adják meg (mi a nem betû)
További bővítések
perl, java, python, tcl ...
check http://www.tropicsoft.com/Components/RegularExpression/SyntaxBcb3.htm