Portál AbcLinuxu, 23. května 2025 08:19

Dotaz: REGEX v PERL-e

13.11.2015 14:24 pupala | skóre: 21
REGEX v PERL-e
Přečteno: 242×
Odpovědět | Admin
Ahojte.

Snaží sa do premennej vložiť údaje vyparsované z riadku perlom. Riadok vyzerá: Message: Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/etc/modsecurity/modsecurity_crs_21_protocol_anomalies.conf"] [line "47"] [id "960015"] [rev "2.2.5"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"] [tag "PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]

Potrebujem doo jednej premennej uložiť hodnotu čísla v [id "xxx'] do druhej hodnotu reťazca v [msg "xxx"] a do tretej hodnotu reťazca v [file "xxxx"] a do štvrtej hodnotu z [line "xx"]

Viem sa dostať iba po \[id "([\d]+)"\], čo je len prvá premenná.

Ďakujem za prípadnú pomoc.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

wamba avatar 13.11.2015 15:53 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: REGEX v PERL-e
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takhle (napsáno nehezky):
echo 'Message: Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/etc/modsecurity/modsecurity_crs_21_protocol_anomalies.conf"] [line "47"] [id "960015"] [rev "2.2.5"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"] [tag "PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]'|perl -MData::Dumper -nE 'my %a= (m/\[([^\]]+)\s+"([^"]+)"\]/g ); say Dumper \%a '
This would have been so hard to fix when you don't know that there is in fact an easy fix.
13.11.2015 16:02 martin-ux
Rozbalit Rozbalit vše Re: REGEX v PERL-e
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/perl

use warnings;
use strict;
use Data::Dumper;

open (FILE, "<text") or die ("unable to open text: $!");

my @array = split /\s+\[(.*?)\]\s+/, <FILE>;
close (FILE);

foreach (@array) {
        print $1 ."\n" if /"(.*)"/;
}

print "\n\narray dump:\n". Dumper(@array);

tvoj string som si ulozil do suboru "text". v tomto pripade som ocakaval len jeden riadok v nom. vytvorim si pole rozdelene podla [.*]. text ktory ma zaujima je v paroch "".
13.11.2015 19:58 pupala | skóre: 21
Rozbalit Rozbalit vše Re: REGEX v PERL-e
Ahojte, vytvoril som regex uvedený nižšie so šiestimi skupinami
\[file "(.+)"\] \[line "([\d]+)"\] \[id "([\d]+)"\].+\[msg "(.+)"\] (\[data ".+"\])?.+\[severity "(.+)"\]
Potreboval som to pre parsovanie audit logu modulu mod_security do apache a trochu tápem v regex-och a trvá mi dlho, kým sa na ne akotak naladím.
Ďakujem Vám všetkým

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.