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

Regular Expression: Ich suche mal wieder ein Regexp .... (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
BrownWolf
 2003-09-22 00:09
#54455 #54455
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Quote
Interessanter Weise geht das mit s nicht so, wie ich es von m in Erinnerung hatte :-/
Damit hab ich mich gestern abgemüht (Ich wollte alle Treffer, die ich im String finde in ein Array extrahieren und dabei den String halt noch verändern.)
Dies ist mir nur in zwei Statements gelungen, aber nicht in einem. Hat dazu jemand vielleicht eine Idee?


Was meinst du mit String ändern ?
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Crian
 2003-09-22 00:22
#54456 #54456
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich meine soetwas:

Code: (dl )
1
2
3
my $text = ...;
$text =~ s~^([^<]+)~~;
my $fang = $1;

aber halt in einem Befehl. Inzwischen sieht es jetzt so aus:
Code: (dl )
1
2
if ($text =~ s~^([^<]+)~~) {
my $fang = $1;

deshalb stört es mich nicht mehr so, aber ich würd doch gern wissen, ob es irgendwie geht.
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
BrownWolf
 2003-09-22 00:29
#54457 #54457
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Meinst du sowas ähnliches ?:

Code: (dl )
1
2
3
4
5
6
7
my $fang;
my $text = "BrownWolf";
$text =~ s~
^([^<]+)
(?{$fang=$1})
~~x;
print $fang;
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Crian
 2003-09-22 00:33
#54458 #54458
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Nein, ich meite so wie beim matchen:

Code: (dl )
my ($fang) = $text =~ s~^([^<]+)~~;

geht nicht, aber

Code: (dl )
my ($fang) = $text =~ m~^([^<]+)~;

funktioniert.
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
BrownWolf
 2003-09-22 00:38
#54459 #54459
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Das weiss ich nicht ... ich hätte jetzt (?{$var++}) gemacht aber scheint auch nicht zu gehen.

Edit:

Code (perl): (dl )
1
2
3
my $text = "BrownWolf BrownWolf BrownWolf BrownWolf";
my ($fang) = $text =~ s~BrownWolf~~g;
print $fang;


gibt bei mir 4 aus. Vielleicht weil du kein /g hinten hast ? Oder wegen dem ^ für Anfang ?
Ich verstehe dein Regexp auch nicht ;D\n\n

<!--EDIT|BrownWolf|1064176874-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Crian
 2003-09-22 00:49
#54460 #54460
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Du fängst in Deinem RegExp auch gar nichts (es sind keine Klammern da). Aber das Probelm ist ganz genau, dass s im gegensatz zu m auch im Arraykontext die Anzahl der eingefangenen Strings zurückgibt und nicht die Strings selbst.

Meine RE will alles vom Anfang des $text'es was vor dem ersten < kommt (oder alles, falls kein Kleinerzeichen im Text vorhanden ist) aus $text entfernen und gleichzeitig einfangen (um es anderweitig zu verarbeiten).

Edit: Und das tut sie auch sehr schön in der zwei-zeiligen variante. Da ich die Abprüfung eh brauche, verliere ich auch nichts, es ist mehr akademische Neugier...\n\n

<!--EDIT|Crian|1064177452-->
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
Crian
 2003-09-22 00:55
#54461 #54461
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht zur Verdeutlichung des Problems dieses Programm:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
{
my $text = "BrownWolf BrownWolf BrownWolf BrownWolf";
my @fang = $text =~ s~(Brown)Wolf~~g;
{local $"=', '; print "s: @fang\n"}
}

{
my $text = "BrownWolf BrownWolf BrownWolf BrownWolf";
my @fang = $text =~ m~(Brown)Wolf~g;
{local $"=', '; print "m: @fang\n"}
}

Ausgabe:

Code: (dl )
1
2
s: 4
m: Brown, Brown, Brown, Brown


klarer?

und my ($var) = ... ist genau so ein Arraykontext wie my @arr = ...
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
Crian
 2003-09-22 01:00
#54462 #54462
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=BrownWolf,21.09.2003, 22:38]Vielleicht weil du kein /g hinten hast ? Oder wegen dem ^ für Anfang ?[/quote]
Das Dach vorn bedeutet Zeilenanfang. Wenn ich auf den matche, nützt mir g nix, da der Zeilenanfang (im Normalfall) nur einmal vorkommt.

Zum ^ nochmal in abwandlung obiges Programm:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
{
my $text = "BrownWolf BrownWolf BrownWolf BrownWolf";
my @fang = $text =~ s~^(Brown)Wolf~~;
{local $"=', '; print "s: @fang\n"}
}

{
my $text = "BrownWolf BrownWolf BrownWolf BrownWolf";
my @fang = $text =~ m~^(Brown)Wolf~;
{local $"=', '; print "m: @fang\n"}
}


Mit der Ausgabe

Code: (dl )
1
2
s: 1
m: Brown
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
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2003-09-20 20:34.