![]() |
![]() |
9 Einträge, 1 Seite |
1
2
3
4
5
%tausche = (
'eins' => 'zwei',
'zwei' => 'eins',
'drei' => 'vier');
$zeichen = 'bla eins bla zwei bla drei bla vier';
$zeichen = 'bla zwei bla eins bla vier bla vier'
$zeichen = 'bla eins bla eins bla vier bla vier'
@ergebnis = map {$zeichen =~ s/$_/$tausche{$_}/g} keys %tausche;
1 2
my $regex = join '|', map quotemeta, keys %tausche; $zeichen =~ s/($regex)/$tausche{$1}/g;
$regexp = 'eins|drei|zwei';
$zeichen =~ s/(eins|drei|zwei)/$tausche{$1}/g;
Benutzer+2008-09-09 10:01:12--Danke Moritz,
du baust indirekt eine ODER-Verknüpfung, oder?
Die regexp würde sich auflösen in:
Code: (dl )$regexp = 'eins|drei|zwei';
QuoteGibt es eine Beschränkung für den Inhalt von $regexp? 255 Zeichen oder so?
1
2
3
4
5
%tausche = (
'eins' => 'zwei',
'zwei' => 'eins',
'drei' => 'vier');
$zeichen = 'bla eins bla zwei bla drei bla vier bla zweiundzwanzig';
s/\b($regex)\b/.../
s/ (?<= [">] \[) ($regex) (?= \] ["<]) /.../x
Benutzer+2008-09-09 10:19:23--
Beispiel:
Code: (dl )1
2
3
4
5%tausche = (
'eins' => 'zwei',
'zwei' => 'eins',
'drei' => 'vier');
$zeichen = 'bla eins bla zwei bla drei bla vier bla zweiundzwanzig';
Im Text zweiundzwanzig ist das Muster zwei enthalten und wird auch ersetzt. Soll aber nicht.
pq+2008-09-09 10:42:29--dazu noch als anmerkung:
möchtest du tatsächlich 2 wörter ersetzen, von denen eines ein teilwort des anderen ist,
musst du die wörter vor dem bauen der regex noch nach länge sortieren. vergess ich auch
immer mal wieder. also
map { quotemeta $_ } sort { length $b <=> length $a } ...
damit wird immer das längste wort gematcht.
Benutzer+2008-09-09 10:19:23--Im Text zweiundzwanzig ist das Muster zwei enthalten und wird auch ersetzt. Soll aber nicht.
![]() |
![]() |
9 Einträge, 1 Seite |