Thread Regular Expression zurücksetzen? (3 answers)
Opened by simps1 at 2007-06-05 13:04

renee
 2007-06-05 13:47
#77245 #77245
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Noch schöner finde ich, Variablen zum Einfangen der RegEx-Captures zu verwenden...

z.B.:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;

my ($eins,$zwei) = 'Test im Test' =~ /(es).*(es)/;
print "$eins -- $zwei\n";

   ($eins,$zwei) = 'Perl ist die beste Sprache' =~ /(es).*(es)/;
print "$eins -- $zwei\n";


Dann kann man auch leichter an den Regulären Ausdrücken etwas ändern. Sonst muss man so viel im Code anfassen.

Beispiel aus:

Code (perl): (dl )
1
2
'Max. 456 Min. 123' =~ /(\d+).*(\d+)/;
print "Maximum ist $1 -- Minimum ist $2\n";
Jetzt ändert sich der String und in der Mitte kommt noch ein Differenzwert, dann müssen mehrere Sachen angepasst werden:

Code (perl): (dl )
1
2
'Max. 456 Diff. 333 Min. 123' =~ /(\d+).*(\d+).*(\d+)/;
print "Maximum ist $1 -- Minimum ist $3 --- Differenz ist $2\n";


Dann vergisst man aber leichter mal das $2 in $3 zu ändern.

Mit Variablen passiert das nicht leicht:
Aus
Code (perl): (dl )
1
2
my ($max,$min) = 'Max. 456 Min. 123' =~ /(\d+).*(\d+)/;
print "Maximum ist $max -- Minimum ist $min\n";


wird
Code (perl): (dl )
1
2
my ($max,$diff,$min) = 'Max. 456 Diff. 333 Min. 123' =~ /(\d+).*(\d+)/;
print "Maximum ist $max -- Minimum ist $min --- Differenz ist $diff\n";


Edit: mit if(...) sollte man dennoch arbeiten, weil man sonst so viele Warnungen mit "uninitialized value" bekommt...\n\n

<!--EDIT|renee|1181037307-->
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/

View full thread Regular Expression zurücksetzen?