Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10351[/thread]

RegExp matcht nicht



<< >> 4 Einträge, 1 Seite
Opaxtl
 2007-09-09 01:07
#99228 #99228
User since
2007-03-21
12 Artikel
BenutzerIn
[default_avatar]
Hallo Forum,

warum matcht das hier nicht:

Code (perl): (dl )
1
2
3
4
5
my $foo = qq(<a href="/cgi-bin/lesen.cgi?benutzer=<!--#echo var='REMOTE_USER' -->&datei=simonsalbum/00107.html">);
my $bar = qq(<h4><img src="../images/simonsalbum/neu.jpg" width="69" height="69" alt=""><a href="/cgi-bin/lesen.cgi?benutzer=<!--#echo var='REMOTE_USER' -->&datei=simonsalbum/00107.html">Test</a> (Änderung)</h4>\n);
if ($bar =~ m($foo)) {
  die "geht doch";
}


Was steht in $foo Schlimmes drin?
Danke euch!
Patrick
GwenDragon
 2007-09-09 01:50
#99229 #99229
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
In $foo muss ein regex stehen.
Aber du hast $foo nicht als Regex gequotet.

Code: (dl )
1
2
3
4
5
my $foo = qq(<a href="/cgi-bin/lesen.cgi?benutzer=<!--#echo var='REMOTE_USER' -->&datei=simonsalbum/00107.html">);
my $bar = qq(<h4><img src="../images/simonsalbum/neu.jpg" width="69" height="69" alt=""><a href="/cgi-bin/lesen.cgi?benutzer=<!--#echo var='REMOTE_USER' -->&datei=simonsalbum/00107.html">Test</a> (Änderung)</h4>\n);
if ($bar =~ m(\Q$foo\E)) {
die "geht doch";
}
sid burn
 2007-09-09 03:59
#99230 #99230
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
So wie es ausschaut möchtest du einen bestimmten String in einem anderen Suchen.

Wenn du allerdiengs soetwas schreibst.
Code (perl): (dl )
$bar =~ m/$foo/

Dann wird der Inhalt von $foo als Regex betrachtet, und nicht als String, Zeichen haben also eine besondere bedeutung. Das was du willst ist eher das hier:

Code (perl): (dl )
$bar =~ m/\Q$foo\E/

Dadurch werden alle sonderzeichen in $foo escaped und du suchst wirklich einen String.

Übrigens wenn du einen direkten String innerhalb eines anderen suchst dann ist es besser gleich index() zu nehmen. Das macht genau das gewünschte und ist schneller.

Code (perl): (dl )
if ( index($bar, $foo) >= 0 ) {...

Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Opaxtl
 2007-09-09 22:52
#99253 #99253
User since
2007-03-21
12 Artikel
BenutzerIn
[default_avatar]
Bingo, danke euch!

@sid burn: Das weiß ich, in meinem Code stehen noch Klammern zum Teilausdruck speichern, die habe ich hier weggelassen.
<< >> 4 Einträge, 1 Seite



View all threads created 2007-09-09 01:07.