Thread RegEx mit bedingter Ersetzung
(11 answers)
Opened by micha2 at 2023-07-09 13:44
> Dann empfehle ich, von Einzeilern mit -pe-Switches die Finger zu lassen. So wie der Code hier steht, eignet er sich eher für einen Verschwurbelungswettbewerb als für eine Lösung des Problems.
Das hilft mir (jetzt) nicht weiter. > Wenn Du reguläre Ausdrücke mit dem Suffix /e verwendest, dann wird der "Ersetzungsteil" ausgeführt Ja klar, deswegen mache ich das doch! Die Version mit print: > und dessen Ergebnis ist der Ersetzungstext. So stelle ich mir das auch vor: 1. print gibt seine Zeichen aus, danach 2. substitute wird ausgeführt und setzt die 1 ein. Damit 3. steht dann der Teil vor dem Match-Text der RegEx (das ist a) hinter den mit print ausgegebenen Zeichen. 4. Die Version ohne print gibt den \"Text\" zurück, der dann als Ersetzungstext in substitute verwendet wird. Und bei if (0) {\"Text\"} ist die Rückgabe 0; daher die 2 Nullen. 5. Wie kann man die Rückgabe 0 durch Rückgabe "" ersetzen? 6. Leider wird bei mehreren Befehlen B1; B2; B3 nur der letzte zurückgegeben. Wie kann man die Ergebnisse von B1 . B2 . B3 konkatenieren, so dass diese Aneinanderhängung zurückgegeben wird an substitute und dann von substitute als Ersetzungstext verwendet wird? > Das ganze hat nichts mit regulären Ausdrücken zu tun sondern mit dem Perl-Code im Ersetzungsteil s.o. zuerst Perl, danach RegEx. > Ein print innerhalb des Ersetzungsteils ist auch verdächtig, wenn mit einer perl -p-Schleife gearbeitet wird. Sonst, mit perl -ne, fehlt der Text vor und der Text nach dem Match für die Weiterverarbeitung folgender "| perl -pe …". |