8.dubna 2005
Nedávno jsem byl v Praze na školení ohledně regulárních výrazů. Školení nebylo špatné, jen mě se zdálo trošku zbytečně dlouhé. Kdybychom končili kolem poledne, bylo by to akorát. Každopádně mi tu zbylo pár poznámek, které si nejlépe uložím tak, že si je zapíšu sem.
Ing. Jan Vrbata - REGULÁRNÍ VÝRAZY
Standardy pro regulární výrazy: (dva různé, ale hodně podobné)
- POSIX 1003.2 (mezinárodní norma)
- PCRE (odvozenina)
POZN:Podle mě je pak hlavně spousta nestandardů, které používají různé jazyky. Ale základ je asi opravdu vždy stejný.
www.pcre.org - knihovna PCRE z Perlu, kterou lze imlementovat do vlastních programů
Literatura:
Operátory, metaznaky a kvantifikátory
- Pro nelafanumerické znaky (přeba ?), které mají předřazené , stává se z něj obyčejný alfanumerický znak. Tj. ?=speciální znak, ?= otazník
- Zřetěžení (posloupnost znaků): abc=abc
- Tečka "." reprezentuje libovolný 1 znak
- [ ] reprezentují výčtovou množinu, tj. odpovídá jednomu znaku uvedenému v závorkách.
- lze používat intervaly (např 0-9, a-z, d-r, ...) Např pro písmeno [a-zA-Z]
- negace: znak stříšky "^" např [^0-9] stříška musí být vždy na začátku, jinak je brána jako obyčejný znak
- kategorie (stangard POSIX): (nutno použít pouze uvnitř hranatých závorek - tj. dvojitý hranatý závorky)
- [:digit:] - číslice
- [:alnum:] - alfanumerický znak
- .kategorie (standard PCRE):
- d - číslice
- w - alfanumerický znak
- D - jedna nečíslice
- W - jeden nealfanumerický znak
- operátor | - označuje nebo. Vybírá věci v závorce. Např: (slovo1|slovo2)
- metaznak ^ reprezentuje začátek řetězce a $ konec řetězce
- kvantifikátor * reprezentuje 0 a více výskytů daného znaku nebo závorky, který kvantifikátoru bezprostředně předcházel
- tento kvantifikátor je tzv. žravý a snaží se pojmou co nejvíc znaků
- dáme-li za kvantifikátor ?, potlačíme její žravost a vybere co možná nejmenší počet znaků (takzvaně LEISI-líný)
- kvantifikátor + reprezentuje totéž jako hvězdička, ale reprezentuje 1 a více výskytů
- kvantifikátor ? reprezentuje 0 nebo 1 výskyt daného znaku nebo závorky, který kvantifikátoru bezprostředně předcházel
- kvantifikátor {n} reprezentují n-opakování
- varianta {min,max} reprezentuje interval opakování. Lze potom psát i {min,} (nebo {,max} - tato implementace nám nějak nefunguje, ale měla by)
- operátor reprezentuje začátek a konec slova (v POSIXu [[:<:]] a [[:>:]])
- operátor 1 2 ... označují obsah 1., 2. ... závorky ve výrazu. Čísla se počítají vždy podle levé závorky. Tedy ((a)(b)) potom zanmená 1=ab, 2=a 3=b
- chceme-li zapamatování nějaké závorky eliminovat, potom se píše (?: a tato závorka nebude zapamatována
- operátor w reprezentuje písmena ve slovu (znaky a čísla)
- metaznak (?=xxxxxx) reprezentuje výhled dopředu = nastaví kurzor na slovo xxxxxxx, ale neporovnává hos ničím. (Např: d+(?= kč) vrátí mnočinu číslic, které předchází slovu "kč"
- (?!=xxxxxx) totéž, ale negace. Např: d+(?! kč) vrátí všechny čísla, za nimiž není Kč. Nebo (?!000)ddd vrátí třímístné číslo mimo 000
- metaznak (?<=xxxxx) a (?<!xxxxxx) je totéž ale né dopředu, ale zpět.
Komentáře čtenářů
1.
81.201.60.14515. 10. 2012 9:09:00
Chcete-li ke komentáři přidat svou fotku nebo jinou ikonku, postupujte podle návodu.