Regulärer Ausdruck funktioniert nicht
Frank
- perl
Allen Weisen und Wissenden
folgendes Problem:
Das unterstehende Testprogramm soll einen String parsen und alles, was in eckigen Klammern steht, Html-formatieren. Das Programm läuft, macht aber außer dem Ausdruck von $abs im Urzustand nicht Sichtbares. Wenn ich die eckigen Klammern im String und im regulären Ausdruck durch andere Zeichen ersetze, tritt die gewünschte Ersetzungswirkung ein, nur stehen in den zu verarbeitenden Strings nun mal []...:-(
Wo liegt der/mein Fehler?
#!perl.exe -w
use strict;
my $abs='dfafdasfd[234]fsdfda[435]adfsaf[3563]dfa';
quotemeta $abs;
sub markAdds {
$_[0]=~s/[(.)]/<b>$1</b>/g;
my $rueck = $_[0];
}
$abs=markAdds($abs);
print $abs;
Vorneweg mal ein Dankeschön
Frank
Hallo Frank!
Wenn ich das richtig ueberblicke, hast Du da zwei Fehler drin.
sub markAdds {
$_[0]=~s/[(.)]/<b>$1</b>/g;
my $rueck = $_[0];
}$abs=markAdds($abs);
Erstens muss via return ein Rueckgabewert definiert werden, also return $_[0]. Oder wird $_[0] automatisch returned? Weiss ich jetzt nicht.
Zweitens erlaubt in Deinem Regular expression die Klammerung nur EIN Zeichen zwischen den eckigen Klammern. Es sollte heissen: s/[(.*)]/....
Also, bei 1. bin ich mir nicht ganz sicher, wie gesagt.
Calocybe
Hi Calocybe,
thankx a lot, ich glaube, ich sollte mir ne' ganz dunkle Sonnenbrille kaufen. . statt * war's.
Was die Rückgabe anbetrifft, wird die letzte Zuweisung zurückgegeben, wenn kein return erfolgt.
schönes Wochenende
Frank