Schrift
[thread]9241[/thread]

Wieder mal eine RegEx-Optimierungs-Frage



<< >> 4 Einträge, 1 Seite
perlcharly
 2007-07-29 23:07
#79041 #79041
User since
2007-01-05
11 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich will aus einem logfile die Google-Suchbegriffe herausfiltern, die mit Links zu meiner Seite führen.
Die Google-Suchbegriffe können in unterschiedlicher Form auftreten.
Als Start-Markierung:
...?q=Suchbegriff
...&q=Suchbegriff
Als Ende:
Suchbegriff&...
Suchbegriff
(bei letzterem endet der String also mit dem Suchbegriff)

Nicht immer erfolgreich ist also:
Code: (dl )
1
2
my $string =~ /(\?q=|&q=)(.+?)&/;
my $suchbegriff = $2;

weil manchmal eben kein "&" mehr kommt.
Ich hab das jetzt gelöst mit zwei Suchvorgängen, aber geht es vielleicht eleganter mit einem Rutsch ?

Und bei der Gelegenheit noch eine Frage: Gibt es etwas detailliertere und fundierte Infos zu RegEx (für fortgeschrittene Anfänger) als man sie z.B. in SelfHTML findet, als Buch oder auch im Web?
Perlcharly
MisterL
 2007-07-29 23:43
#79042 #79042
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Quote
als Buch

http://www.oreilly.de/catalog/regex2ger/
“Perl is the only language that looks the same before and after RSA encryption.”
topeg
 2007-07-30 07:10
#96773 #96773
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (dl )
(my $suchbegriff)=$string =~ /(?:\?|&)q=(.+?)(?:&|$)/;


erkennt:
bla.cgi?q=suchbegriff
bla.cgi?q=suchbegriff&blaq=blub
bla.cgi?wasq=anderes?q=suchbegriff
bla.cgi?wasq=anderes?q=suchbegriff&blaq=blub
ptk
 2007-07-30 22:58
#96860 #96860
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nimm doch gleich CGI, damit wird auch URI-Escaping richtig gehandhabt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use CGI qw();
use Data::Dumper qw(Dumper);

for my $x ("...?q=Suchbegriff", "?...=...&q=Suchbegriff") {
    my($qs) = $x =~ m{\?(.*)};
    print Dumper({CGI->new($qs)->Vars});
}
__END__


(Juhu! Ich kann __END__ schreiben!)
<< >> 4 Einträge, 1 Seite



View all threads created 2007-07-29 23:07.