Schleife über m//g mag nicht so wie ich
MudGuard
- perl
0 MudGuard0 Patrick Andrieu0 LanX!
Hi,
use strict;
use warnings;
my $teststring = "xaysdfasldfasfxbyoiuwrwerx1yasdfsadfsadf";
while ($teststring =~ m~\Gx(.)y~g)
{
print "found $1 between x and y \n";
}
sollte m.E. ausgeben:
found a between x and y
found b between x and y
found 1 between x and y
Leider wird aber nur
found a between x and y
ausgegeben.
Ohne das \G bekomme ich endlos
found a between x and y
found a between x and y
found a between x and y
ausgegeben, weil das Matching immer wieder am Stringanfang beginnt - ist ja auch logisch.
Das \G sollte eigentlich dafür sorgen, daß beim zweiten Mal eben nicht am Stringanfang, sondern nach dem ersten Match zu suchen begonnen wird.
Aber es wird kein zweites Mal gematcht.
Und das verstehe ich nicht.
Kann mir bitte jemand auf die Sprünge helfen?
Danke,
cu,
Andreas
Hi,
my $teststring = "xaysdfasldfasfxbyoiuwrwerx1yasdfsadfsadf";
while ($teststring =~ m~\Gx(.)y~g)
Aargh, wie dumm von mir.
Die zweite Fundstelle steht ja nicht (notwendigerweise) unmittelbar nach der ersten, also muß es m~\G.*?x(.)y~g heißen, sprich .*? für beliebige Zeichen zwischen letzter und nächster Fundstelle.
Dann klappt's auch so wie erwartet.
cu,
Andreas
Hallo MudGuard!
Ohne das \G bekomme ich endlos
found a between x and y
found a between x and y
found a between x and y
Ich nicht:
C:>perl -w
use strict;
use warnings;
my $teststring = "xaysdfasldfasfxbyoiuwrwerx1yasdfsadfsadf";
while ($teststring =~ m~x(.)y~g)
{
print "found $1 between x and y \n";
}
^Z
found a between x and y
found b between x and y
found 1 between x and y
C:>
Kann mir bitte jemand auf die Sprünge helfen?
Hier leider nicht, habe ich mich mit \G doch kaum beschäftigt, da müsste ich mich selbst erstma reinlesen...
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
Ohne das \G bekomme ich endlos
found a between x and y
found a between x and y
found a between x and yIch nicht:
Ich auch nicht, ich hatte zuerst das g am Ende vergessen ==> Endlos-Ausgabe.
Um das zu flicken, hatte ich das \G eingeführt - statt einfach das g anzuhängen ...
Natürlich geht's auch ohne das \G.*? ...
Irgendwie ist heute ein Sch...Tag. Im wahrsten Sinne des Wortes (mein Verdauungstrakt schiebt heute alles direkt durch ...)
cu,
Andreas
Hallo MudGuard!
Irgendwie ist heute ein Sch...Tag. Im wahrsten Sinne des Wortes (mein Verdauungstrakt schiebt heute alles direkt durch ...)
Kein Wunder, denn mehr oder weniger ist auch die Verdauung vom Gehirn gesteuert. Wenn Du da lauter $kalare und @rrays oder seltsame Strings hast, und dann auch noch einen Fehler, bringt es alles durcheinander :)
Komputer ausschalten, und eine kleine Winterreise[1] unternehmen!
[1] Hunsrück, Taunus.
Viele Grüße aus Frankfurt/Main,
Patrick
Das \G steht für die stelle die pos() beschreibt, und ich kann mir wirklich nicht vorstellen wozu du es hier brauchst.
DB<1> $teststring = "xaysdfasldfasfxbyoiuwrwerx1yasdfsadfsadf";
DB<2> print $1 while ($teststring =~ m/x(.)y/g)
ab1
funktioniert einwandfrei!
grüße
rolf
Hi,
Das \G steht für die stelle die pos() beschreibt, und ich kann mir wirklich nicht vorstellen wozu du es hier brauchst.
Siehe dieses Posting
cu,
Andreas
Hi
Siehe dieses Posting
hatte ich gelesen, aber ... ich glaube ich muss mich wieder an die hiesige Sortierung gewöhnen um zu sehen was das neueste Posting ist ...