Portál AbcLinuxu, 12. května 2025 04:22

Dotaz: Pomoc s regularnim vyrazem

irenicus avatar 9.5.2007 14:23 irenicus | skóre: 6
Pomoc s regularnim vyrazem
Přečteno: 240×
Odpovědět | Admin
Dobry den, dokaze nekdo napsat regularni vyraz ktery odseparuje jednotlive polozky nasledujiciho zaznamu z logu apache ?
10.10.13.10 - - [09/May/2007:10:44:24 +0200] "GET /joomla/index.php HTTP/1.1" 200 8845
vysledkem by mel o byti toto:
10.10.13.10
-
-
[09/May/2007:10:44:24 +0200]
"GET /joomla/index.php HTTP/1.1"
200
8845
Bojuji 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"
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.5.2007 14:36 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Odpovědět | | Sbalit | Link | Blokovat | Admin
(\d+\.\d+\.\d+\.\d+)\s*?(\-)\s*?(\-)\s*?(\[.*\])\s*?(\".*\")\s*?(\d+)\s*?(\d+)
9.5.2007 14:48 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Navrhuji pouze drobnou změnu:
(\d+\.\d+\.\d+\.\d+)\s*?(\-)\s*?(\-)\s*?(\[.*?\])\s*?(\".*\")\s*?(\d+)\s*?(\d+)
9.5.2007 14:57 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Jo na tohle jsem zapomnel, nicmene struktura retezce by chybu dopustit nemela. Ale jistota je jistota ;-) Jinak jeste pro autora: vyborna vec na hrani si s a testovani regularnich vyrazu je Pyreb.
irenicus avatar 9.5.2007 15:03 irenicus | skóre: 6
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Dik vsem za bleskovou reakci ... musim vice studovat :-)
9.5.2007 15:15 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
No, kdyby nějaký poťouchlý webový klient poslal dotaz třeba
GET /?]" HTTP/1.0
Host: example.com
Pokud to tedy Apache do logu uloží neescapovaně (jako např. Jetty)…
9.5.2007 15:36 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
hmm, apache to do logu uloží ako \" ... 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 (?: (?:\\\\)* (?:\\\")?[^\"])*
9.5.2007 15:28 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
pozor na chyby, v combined logu nie vždy musia byť %l a %u nevyplnené ...
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 -.

irenicus avatar 9.5.2007 15:22 irenicus | skóre: 6
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Hmmm .... co kdyby byl LogFormat libovolne definovan ? Mohl bych preformulovat ulohu asi takto:

Vrat vsechny souvisle casti textu: za souvislou cast testu povazuj ty casti jenz jsou vymezeny [] nebo "" jinak vse ostatni jenz neobsahuje mezeru.
9.5.2007 15:46 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Na to už bych doporučoval napsat si nějaký miniparser (1 cyklus, pár switchů nebo ifů, za 5 minut hotovo), bude to jednodušší, než se mořit s vyhlížením v regulárních výrazech (a kdo ví, zda by to i s tím vyhlížením šlo; navíc ne každý RE engine vyhlížení umí).
irenicus avatar 9.5.2007 15:50 irenicus | skóre: 6
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Kazdopadne jsem s tim jiz zacal. Snazil jsme se pouze najit elegantni reseni a RegExp se mi pripadali jako spravna cesta.
9.5.2007 16:09 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
perl, bez look(ahead/behind) :-)
pri troche odvahy to možno aj v php niekto vyskúša s/( (?: [^\[\"]\S* ) | (?: \" (?: (?:\\\\)* (?:\\\")?[^\"])* \" ) | (?: \[ .*? \] ) ) \s+/$1\n/xg; my @vars = split /\n/;

(ps. netestované, nechcelo sa mi ...)

9.5.2007 16:39 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Asi jo :-) 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 ;-)
9.5.2007 16:48 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
write-only? pôvodne som to chcel dať do <pre>, ale sekol som sa :-D
čudoval by ste sa, čo urobí pár nových riadkov a medzier s čitateľnosťou :-)
9.5.2007 17:13 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Pomoc s regularnim vyrazem
Já jsem se na to díval samozřejmě do zdrojáku HTML, kde to je odřádkované :-) 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.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.