Portál AbcLinuxu, 10. listopadu 2025 07:55
10.10.13.10 - - [09/May/2007:10:44:24 +0200] "GET /joomla/index.php HTTP/1.1" 200 8845vysledkem by mel o byti toto:
10.10.13.10 - - [09/May/2007:10:44:24 +0200] "GET /joomla/index.php HTTP/1.1" 200 8845Bojuji s tim uz dlouho a opravdu si nevim rady
... pripadne by mi pomohlo kdyby nekdo "vytahl" alespon retezce
[09/May/2007:10:44:24 +0200] "GET /joomla/index.php HTTP/1.1"
(\d+\.\d+\.\d+\.\d+)\s*?(\-)\s*?(\-)\s*?(\[.*\])\s*?(\".*\")\s*?(\d+)\s*?(\d+)
(\d+\.\d+\.\d+\.\d+)\s*?(\-)\s*?(\-)\s*?(\[.*?\])\s*?(\".*\")\s*?(\d+)\s*?(\d+)
Jinak jeste pro autora: vyborna vec na hrani si s a testovani regularnich vyrazu je Pyreb.
GET /?]" HTTP/1.0 Host: example.comPokud to tedy Apache do logu uloží neescapovaně (jako např. Jetty)…
\" ...
v tom prípade pomôže pridať na koniec $ ... a v mojej nižšie zapísanej verzii treba aj %r opraviť na .*, popr .*?, popr trochu zložitejšie (?: (?:\\\\)* (?:\\\")?[^\"])*
qr/ (\S+) # %h \s+ (\S+) # %l \s+ (\S+) # %u \s+ (\[[^\]]*\]) # %t \s+ (\"[^\"]*\") # \"%r\" \s+ (\d+) # %>s \s+ (\S+) # %b /x%b môže obsahovať aj
-.

s/(
(?: [^\[\"]\S* )
| (?: \" (?: (?:\\\\)* (?:\\\")?[^\"])* \" )
| (?: \[ .*? \] )
) \s+/$1\n/xg;
my @vars = split /\n/;
(ps. netestované, nechcelo sa mi ...)
Jinak hezká ukázka toho, že RE je lepší používat jen na jednoduché věci nebo jednorázově, protože složitější RE jsou write-only

Ale stejně, že by bylo na první pohled jasné, co to dělá… Tenhle konkrétní případ je ještě dobrý, ale pak si někdo vzpomene, že tam mohou být i jednoduché uvozovky, a je problém. Tedy ne že bych sám nenapsal složitější RE. Ale tohle je podle mě dobrý příklad toho, že RE jsou sice mocné, ale občas se vyplatí použít něco tak obyčejného, jako cyklus a switch.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.