Schrift
[thread]5614[/thread]

Durch ein "+" ein RegEx-Problem...

Tags: Ähnliche Threads

Leser: 1


<< >> 9 Einträge, 1 Seite
renee
 2003-08-08 14:15
#75525 #75525
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Auch wenn das Board noch nicht offiziell eröffnet wurde, stelle ich meine Frage hier hin...

Ich habe in einer Datei Zeilen, die wie folgt aussehen:
# 4+0_129769/14-98 Exp number

Wenn ich jetzt mit
Code: (dl )
1
2
3
4
5
6
7
8
  $id = "4+0_129769/14-98";
 if($line =~ /$id/){ # in $line steht oben genannte Zeile
   #mach was...
   print "Yes\n";
 }
 else{
   print "No\n";
 }

überprüfe, ob $id in der Zeile steht, dann bekomme ich immer "No" ausgegeben. Erst wenn ich das "+" durch ein anderes Zeichen ersetze (sowohl in $line als auch in $id), funktioniert es. Warum??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DS
 2003-08-08 14:18
#75526 #75526
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=renee,08.08.2003, 12:15]Erst wenn ich das "+" durch ein anderes Zeichen ersetze (sowohl in $line als auch in $id), funktioniert es. Warum??[/quote]
Weil das + nicht gequotet wird, und deswegen so verwendet wird, als hättest du es so direkt in den RegExp reingeschrieben... mit alles weiteren Konsequenzen...

Also entweder du quotest $id vorher mit quotemeta, oder im RegExp mit /\Q$id\E/...
renee
 2003-08-08 14:26
#75527 #75527
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Danke!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2003-08-08 14:28
#75528 #75528
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=renee,08.08.2003, 12:15]
Code: (dl )
1
2
3
4
5
6
7
8
  $id = "4+0_129769/14-98";
 if($line =~ /$id/){ # in $line steht oben genannte Zeile
   #mach was...
   print "Yes\n";
 }
 else{
   print "No\n";
 }
[/quote]
einfacher wäre wohl

Code: (dl )
1
2
3
4
5
6
7
    $id = "4+0_129769/14-98";
   if ($line eq = $id) {
       print "Yes\n";
   }
   else {
       print "No\n";
   }


Mit vorherigem Aufräumen (chomp, ggf. führende und anhängende Leerzeichen entfernen).
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2003-08-08 14:34
#75529 #75529
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, da in $line
Code: (dl )
# 4+0_129769/14-98 Exp number

steht...

Hab da aber noch ne Frage. Warum gibt es nur bei einem "+" diese Probleme und nicht bei einem "/"??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2003-08-08 14:35
#75530 #75530
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,08.08.2003, 12:34]Nein, da in $line
Code: (dl )
# 4+0_129769/14-98 Exp number

steht...

Hab da aber noch ne Frage. Warum gibt es nur bei einem "+" diese Probleme und nicht bei einem "/"??[/quote]
weil ein / kein regexp command ist; + hingegen schon
esskar
 2003-08-08 14:37
#75531 #75531
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wie wärs dann so ?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my $line = "# 4+0_129769/14-98 Exp number";
my @parts = split / /, $line;

if($parts[1] eq $id)
{
print "coolo\n";
}
else
{
print "mist\n";
}
Crian
 2003-08-08 15:32
#75532 #75532
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=renee,08.08.2003, 12:34]Nein, da in $line
Code: (dl )
# 4+0_129769/14-98 Exp number

steht...[/quote]
Vielleicht wär ein split und eq trotzdem schneller als die RE :)
Aber das müsste man testen
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2003-08-09 13:39
#75533 #75533
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=renee,08.08.2003, 12:34]Nein, da in $line
Code: (dl )
# 4+0_129769/14-98 Exp number

steht...

Hab da aber noch ne Frage. Warum gibt es nur bei einem "+" diese Probleme und nicht bei einem "/"??[/quote]
/ steht in diesem Fall fuer die Grenze des RegEx; da die jedoch schon zu dem Zeitpunkt, an dem die Variable interpoliert wird, schon festgelegt sind, geht da nichts mehr schief.
Schief geht es hingegen auch groesstenteils bei . \ { ( [ + * - ? ^ und gelegentlich auch bei ~ ...
Also immer /\Q$variable\E/ verwenden (es sei denn, die Interpolation ist gewollt)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 9 Einträge, 1 Seite



View all threads created 2003-08-08 14:15.