Thread suchen / ersetzen >> nur 2. / 3. / 4. Treffer ?!?: suchen ersetzen Problem (6 answers)
Opened by Gast at 2006-07-11 18:24

betterworld
 2006-07-11 22:28
#68050 #68050
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Entweder so:
Code: (dl )
$text =~ s/a/$neu/ for 1,2,3;

Oder so:
Code: (dl )
1
2
my $count = 0;
$text =~ s/(a)/$count++ < 3 ? "xx" : $1/g;


Das erste hat den Nachteil, dass es nur funktioniert, wenn $neu nicht "a" enthält.

Effizienznachteile haben beide, je nach Verteilung der "a"s.

Dann habe ich noch einen (vielleicht?) effizienteren Vorschlag, der aber etwas hässlich aussieht:
Code: (dl )
1
2
3
4
5
my $count = 0;
while ($text =~ m{(a)}g) {
substr($text, $-[0], $+[0]-$-[0], "XX");
last if ++$count >= 3;
}


Nachtrag: So sollte es auch gehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
my $count = 0;
my $text = 'aeuaeueauaeuau';
my $search = 'a';
my $replace = 'XX';
while ($text =~ m{\Q$search}g) {
substr($text, pos($text)-length($search), length($search), $replace);
last if ++$count >= 3;
}
print "$text\n";
\n\n

<!--EDIT|betterworld|1152643753-->

View full thread suchen / ersetzen >> nur 2. / 3. / 4. Treffer ?!?: suchen ersetzen Problem