[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