regex - jak na interval v IP adrese?

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pátek Prosinec 3 11:00:55 CET 2004


On Wed, 1 Dec 2004, Ing. Pavel PaJaSoft Janoušek wrote:

> > -----Original Message-----
> > From: Jaroslav Lukesh [mailto:lukesh na seznam.cz] 
> > (((^192)|(1)|(2)|(168-170))\.){4} je to tak správně?
> 
> )|1|2 znamená nebo... to nechcete...
> 
> 168-170 znamená znaky 16 a poté interval (blbě!) 8-1 a poté znaky 70, to
> taky nechcete...:-) - já bych to při kompilaci taky odmítl...

Ne. 168-170 znamena znaky 1, 6, 8, pomlcka, 1, 7 a 0.

Navic i kdyby ten interval byl dobre, tak ma tenhle vzorek tu vlastnost, 
ze mu nevyhovuje 192.1.2.168, ale 192.1.2.168. (tecka na konci), ale take
192.168.2.1. (jine poradi).

Take si nejsem jisty, jestli je {4} bezne podporovana konstrukce.
To je mozna ten duvod, proc to nejaky parser nechtel sezrat.

Regularni vyraz je proste regularni vyraz a je ho nutno konstruovat podle 
textu. Nejprve mnozinu zkoumanych slov rozdelim na podmnozinu podle delky,
protoze budeme pracovat v lexikografickem usporadani, a tam je 9 > 10.
Pak mnoziny rozdelim na intervaly v lexikografickem usporadani a pro kazdy 
interval typu PxA az PyB vygeneruji vyraz ^P(xU|[(x+1)-(y-1)]V|yW)$, kde
P je nejdelsi spolecny prefix, x a y znaky, U je vyraz pro interval A az 
99...99, V je vyraz pro prislusny pocet libovolnych znaku a W je vyraz pro 
interval 00...00 az B. Prostredni clen samozrejme vypadava, pokud x+1=y.
Vyrazy pro intervaly pak spojim dohromady a muzu pripadne jeste 
vyoptimalizovat spolecne prefixy (nebo to muzu udelat uz behem jejich 
generovani). Vysledek je slozity, ale postup lze mechanizovat.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."




Další informace o konferenci Linux