use Mosche;
Ich habe in einer Variablen einen mehrzeiligen Text, der garantiert mit einem Zeilenumbruch beginnt und endet, z. B.
$text="\nCEGVZTKGF\nEGJIOJ\nJKIOH\nJIOJIO\nDFRTDEG\nZGFZUGFF\nHJUIOHUI\n";
In einer zweiten Variablen steht ein mich interessierender String, z. B.
$relevant="EG";
Es ist kein Problem, alle Textzeilen zu löschen, die den String in $relevant enthalten:
$text=~s/\n[^\n]*$relevant[^\n]*//g;
Ich möchte aber genau das Gegenteil erreichen: Ein regulärer Ausdruck soll dafür sorgen, daß nur noch die Zeilen übrigbleiben, die "EG" enthalten.
Ein grundsätzlich anderer Ansatz wäre sowas wie:
my @tmp;
foreach (split(/\n/, $text)) {
push @tmp, $_ if /$relevant/;
}
$text = join "\n", @tmp;
oder, als einzeiler
$text = join ("\n", grep { /$relevant/ } split(/\n/, $text));
das sieht außerdem *geil* aus, und versteht keiner mehr 8-)
use Tschoe qw(Matti);