Finty k regulárním výrazům

Download Report

Transcript Finty k regulárním výrazům

cvičení č. 8
Pokročilé regulární výrazy
- na co je třeba dát pozor
David Chudán
Upravil D. Pejčoch
Kvantifikátory, chování
• Výchozí chování kvantifikátorů je „žravé“
(greedy), kdy se snaží rozpoznat co nejvíce
znaků tak, aby byl ještě splněn zbytek výrazu.
• Lokálně lze chování kvantifikátorů nastavit na
líné (lazy), kdy kvantifikátor rozpozná co
nejméně znaků.
• Líné chování se nastavuje pomocí otazníku za
kvantifikátor (Př.: <.*?>)
• Příklad: <[a-z <>/]*?> => <a href></a>
Kvantifikátory, chování
Příklad:
Mějme řetězec „baacaaac“:
– Regulární výraz b.*c v defaultním, „žravém“
chování nalezne jednu shodu „baacaaac“
– Pokud nastavíme lazy chování pomocí
výrazu b.*?c, shoda bude „baac“.
Modifikátory
• Modifikátory slouží ke změně následujících znaků.
• Přiřazení jednoho znaku do určité kategorie se dělá
pomocí \p{} (pozor na velká a malá písmena, výraz \P{}
je negací předcházejícího!!!)
• \u – převod následujícího písmena z malého na velké
• \l – převod následující písmena z velkého na malé
• V případě použití velkých písmen u těchto znaků ( \U,
\L) modifikátor platí až do konce řetězce nebo do
nejbližšího výskytu \E, který tuto konstrukci ukončuje.
• Př.: Regulární výraz \d+|\p{L}+ rozpoznává sekvence
písmen nebo číslic.
Matching Flags
• /i – aktivuje case sensitive mód
• /s – aktivuje režim jedné řádky (single line
mode). V tomto režimu tečka rozpozná též znak
nové řádky.
• /m – aktivuje režim více řádek (multi line mode).
V tomto režimu stříška (^) značí začátek řádku a
dolar ($) značí jeho konec.
• /x – aktivuje režim volných mezer (free spacing
mode). V tomto režimu jsou mezery mezi regex
výrazy ignorovány a znak # uvozuje komentář.