REGEX - procesor regulárních výrazů

REGEX slouží k jednoduchému vyřezávání částí formátovaného textu, například HTML stránek. Definice se skládá z REGEX výrazů, psaných pomocí REGEX symbolů. Procesor pracuje se dvěma vstupy: REGEX výrazem a formátovaným textem. Aplikací REGEX výrazu vznikne výstupní text, který obsahuje pouze požadované oblasti textu původního. Specifikace těchto oblastí je předmětem regex výrazu. REGEX výrazy lze vnořovat.
Výrazy se skládají ze dvou částí: specifikace a exekutivy. Obsahem specifikace je nastaven způsobu provádění, exekutiva definuje samotné zpracování. Výraz má tvar [specifikace:exekutiva]. Exekutiva může obsahovat mimo exekutivních symbolů i podregexy.

Příklad:

máme zpracovat 100 formátovaných textových zpráv a vypsat z nich jméno a příjmení odesilatele a nadpis. Víme, že zprávy mají stejný formát, že jméno uvozeno slovy First Name:, příjmení Last Name: a nadpis Subject: . Každá položka je zakončena tečkou.

Požadovaný REGEX by vypadal takto: [:*First Name:$.*Last Name:$.*Subject:$.]

REGEX symboly

SymbolFunkce
[{options}:začátek definice výrazu. Blok options obsahuje specifikaci - žádnou, jednu nebo více z následujících voleb oddělených čárkou:
ignorecase - hledat bez ohledu na velká/ malá písmena
repeat - vyhodnocovat výraz opakovaně, dokud je nalezen
serialize - jako zpracovávaný text použít výsledek předchozího zpracování. V opačném případě zpracování probíhá od místa, kde skončil blok předchozí. Volba serialize umožňuje řetězení REGEXů.
]konec definice výrazu.
[/začátek komentáře. Komentář končí nejbližším příštím znakem [ nebo ].
*<text>přeskočit 0 až N znaků a najít <text>
"<prefix>"*"<suffix>"<text>vypsat <prefix>, přeskočit 0 až N znaků zakončených <textem>, a následně vypsat <suffix>. Není-li <text> nalezen, vypíše se pouze <prefix>.
$<text>vypsat 0 až N znaků zakončených <textem>. Není-li <text> nalezen, nevypíše se nic.
"<prefix>"$"<suffix>"<text>vypsat <prefix>, pak vypsat 0 až N znaků zakončených <textem>, a následně vypsat <suffix>. Není-li <text> nalezen, vypíše se pouze <prefix>. <prefix> i <suffix> je nepovinný.
#Symboly * a $ mohou mít příponu #, která mění způsob posunutí kurzoru - namísto nalezení sekvence znaků následující za symbolem následuje počet znaků, který má být přeskočen/ vypsán. Např. $#3 vypíše 3 znaky.
##Symboly * a $ mohou mít příponu ##, která mění způsob posunutí kurzoru - hledá nejbližší výskyt jednoho z textů, následujících za tímto symbolem a oddělených středníkem. Např. pokud spustíme REGEX [:$##TD;TR;TABLE] na text HTML TABLE TD, vypíše "HTML ".
\Zpětné lomítko způsobí potlačení funkce následujícího znaku, např. $. Ten má poté význam běžného textového znaku.
%T%Tento symbol se může objevit v <suffixu>. Je nahrazen nalezeným řetězcem. Používá se zejména v operaci $##.


Komplexní příklad

Následující REGEX odstraní z HTML stránky běžné speficikace stylů. Hlavní REGEX obsahuje celkem 6 podregexů, které text zpracovánají ve třech průchodech. To je dosaženo volbou serialize, která do zpracování přesměruje namísto původního textu text generovaný předchozími bloky. Druhý průchod tedy nepracuje s textem původním, ale s výsledkem prvního průchodu; podobně třetí průchod zpracovává výsledek průchodu druhého.
Volba repeat způsobí cyklické zpracování REGEXu. Pokud by nebyla zapnuta, byl by nalezen a zpracován vždy pouze první výskyt hledaného textu.
Volba ignorecase odstíní rozdíl mezi velkými a malými písmeny. Dvojice znaků [/ jsou začátek komentáře. Komentář končí nejbližším příštím znakem [ nebo ].
[:
	[/	1. průchod: NAJÍT A ODSTRANIT style='...'
	[repeat,ignorecase:$style='*']
	[:$]

	[/	2. průchod: POUŽÍT ZPRACOVANÝ TEXT, V NĚM NAJÍT A ODSTRANIT style="..."
	[serialize,repeat,ignorecase:$STYLE=\"*\"]
	[:$]

	[/	3. průchod: POUŽÍT ZPRACOVANÝ TEXT, V NĚM NAJÍT A ODSTRANIT <style></style>
	[serialize,repeat,ignorecase:$<style>*</style>]
	[:$]

	[/	3. průchod: POUŽÍT ZPRACOVANÝ TEXT, V NĚM NAJÍT JMENOVANÁ SLOVA VYPSAT JE TUČNÝM PÍSMEM - FUNKCE POUŽÍVÁ MAKRO %T%
	[serialize,repeat,ignorecase:$"<b>%T%</b>"##COMPUTER;INTERNET;WWW;HTTP;FTP]
	[:$]

	[/	KONEC
]