[linux] regexp - pochopil som ho? - VZOR centrum.sk
Peter
konfery na lentus.sk
Středa Prosinec 1 21:53:03 CET 2004
Ahoj.
Dost casto sa (man, web, konfery) odvolava na regexp, resp. "rozsirene
vyrazy" (pamatam si nazov spravne??).
Nakolko som dokopy neprogramoval nic a BASH a GREP ovladam iba zakladne,
mam v tom mishung.
Pri hladani ineho som nadabil na toto:
*********
http://napoveda.centrum.sk/email/index.html#44
Regulárne výrazy
Regulárne výrazy slúžia k spracovávaniu textových reťazcov, a to tak, že
definujeme masku, ktorej vyhovujú len určité reťazce.
Príklad:
pre definovanie filtra "ak predmet obsahuje 'lekcia 1'" netreba používať
regulárne výrazy - stačí použiť k tomu určenú podmienku vo filtroch.
Toto riešenie má však nevýhodu v tom, že, podmienke vyhovejú všetky
"predmety" obsahujúce "lekcia 1". A to sa nemusí hodiť vždy. Potom
prichádza na rad regulárny výraz. Vďaka regulárnym výrazom je možné
aplikovať filter napríklad len v prípade, keď "predmet" začína slovom
"lekcia" a končí číslom lekcie, teda nielen číslom "1", ale akýmkoľvek
platným číslom lekcie. Taký regulárny výraz by vypadal takto: "^lekcia
[0-9]*$"
Regulárne výrazy využívajú pre svoju funkciu špeciálne metaznaky, sú to
hlavne tieto:
- "^" začiatok reťazca
výraz: "^ahoj" vyhovie, ak je použitý na reťazec "ahoj svet"
"^ahoj" nevyhovie, ak je použitý na "pavol, ahoj"
- "$" koniec reťazca
výraz: "ahoj$" vyhovie, ak je použitý na "pavol ahoj",
"ahoj$" nevyhovie, ak je použitý na "ahoj pavol"
- "." nahradzuje jeden ľubovoľný znak
výraz: "a.oj" vyhovie, ak je použitý na "ahoj", alebo napr. na axoj"
- "*","+","?" hovorí, koľkokrát sa má daný výraz v reťazci vyskytovať
"*" nahrazuje 0 (nula) až viac znakov
"+" znamená minimálne jeden znak
"?" znamená jeden alebo žiadny výskyt
výraz: "na*ný*" vyhovie pre "naný", ale zároveň i "najdený", tak i
"nastrúhaný" apod.
výraz: "aho+j" vyhovie, ak je použitý na "ahoj", ale aj na "ahooooooj"
- "(" a ")" znamenajú množinu znakov. Pri zápise do formulára je nutné
pred ne dávať znak "\", aby kompilátor výrazov poznal, že ide o metaznak
výraz: "peter ?\(lojzo\)? ?adam" vyhovie, ak je použitý na "peter adam",
ale aj "peter lojzo adam"
- "|" zjednodušene povedané znamená "alebo"
výraz: "peter ?\(lojzo\|alois\)? ?adam" vyhovie, ak je použitý na "peter
adam", ale aj "peter lojzo adam", ale tiež na "peter alois adam"
- "[" a "]" znamenajú vymenovanie použiteľných znakov. Znaky možno buď
vymenovať, alebo použiť rozsah znakov
výraz: "^[123]+[a-z]*$" vyhovie, ak je použitý na "1abc" alebo "2abc",
ale napríklad nevyhovie pri použití na "aabc" alebo "5abc" nebo "1a3c"
*******
Chcem sa spytat, ci dobre TIPUJEM, ze je to regexp a ci to mozem bezne
pouzivat v bash-i, scriptoch a pod.
Diky za uvedenie do problematiky
Peter
Další informace o konferenci linux