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

regex sanity check



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Gast Gast
 2006-02-08 14:43
#62748 #62748
Hi,

kennt einer von Euch eine Moeglichkeit eine Regex, die in einer variable o.ae. gehalten wird, zu validieren.

ich stell mir das folgendermassen vor



Code: (dl )
1
2
3
4
5
6
7
my $regex = "m/^(\d+)$/gi";
if(&check_regex($regex) == 1) {
...
}
else {
print 'regex' . $regex . 'not valid';
}


thx
Taulmarill
 2006-02-08 14:48
#62749 #62749
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wenn du einen regulären ausdruck in einer variable speicherst, solltest du das folgendermassen machen:
Code: (dl )
my $regex = qr/^(\d+)$/;

dabei wird dann von perl der regex auch auf gültigkeit geprüft.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
jmb
 2006-02-08 15:01
#62750 #62750
User since
2006-02-08
30 Artikel
BenutzerIn
[default_avatar]
hi - danke

ich braeuchte allerdings eine moeglichkeit, die mir das error handling selbst in die hand gibt.

ich nuetzte die ueblichen verdaechtigen (warnings, diagnostics, strict) und wuerde gerne eine schleife erstellen, die mir sagt, ob die regex valide ist oder nicht und zwar ohne die fehlermeldung

Code: (dl )
1
2
3
Uncaught exception from user code:
Unmatched ) in regex; marked by <-- HERE in m/^(\d+)) <-- HERE $/ at ./regex.pl line 9.
at ./regex.pl line 9


thx jmb
Taulmarill
 2006-02-08 15:18
#62751 #62751
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
schau dir mal CPAN:Regexp::Parser an. das kann wohl sehr viel mehr als du willst, bietet aber u.a. auch ein anständiges error-handling.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2006-02-08 15:21
#62752 #62752
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
ansonsten die Regex in einem eval auswerten und schauen, obs Probleme gab
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
jmb
 2006-02-08 15:40
#62753 #62753
User since
2006-02-08
30 Artikel
BenutzerIn
[default_avatar]
hi - danke, das modul hilft mir echt weiter. auch wenn ich zu bloed war, es selber zu finden.

zu eval: hatte ich mir auch shcon ueberlegt, aber ich bekomme ein paar hundert dieses expressions ueber eine socket verbindung und da will ich fuer jede eine eval bedingungen schreiben ;)

danke euch
schoene tag noch
Crian
 2006-02-08 16:57
#62754 #62754
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
dafür gibts Schleifen ;-)
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
Taulmarill
 2006-02-08 17:16
#62755 #62755
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
also eval währe auch mein nächster tip gewesen, aber ich finde die lösung mit dem modul, welches den regex parsed, irgendwie schöner.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
jmb
 2006-02-08 17:19
#62756 #62756
User since
2006-02-08
30 Artikel
BenutzerIn
[default_avatar]
ich bin irgendwie kein freund von eval, da ich ja einen nicht zu unterschaetzenden overhead produzieren, wenn ich eine schleife habe, die sagen wir mal 102 eval bloecke produziert und anhand von signaten und oder pipes mit dem hauptprogramm kommunziert ;)
Strat
 2006-02-08 18:13
#62757 #62757
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann man das problem nicht verschieben, indem man die regexen bei der erzeugung schon mit eval testet (also wenn ein user oder so sie eintraegt?)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-02-08 14:43.