Skeeve: Problem mit RegEx und Ersetzen

Beitrag lesen

Moin!

Das funktioniert aus mehreren Gründen nicht. Zum einen erfaßt Du mit Deinem .*? schon zuviel, zum anderen mußt Du den Ausdruck mehrfach laufen lassen, da Du bei einem (vereinfachte Darstellung) Ausdruck /{.*?</ im String "{ xxx <br> <br>" nach der ersten Ersetzung bereits den Teil ""{ xxx <br>" abgearbeitet hast und das zweite <br> keine öffnedne Klammer mehr findet.

Hier ein Script das es in vielen Fällen tut:

#!/usr/bin/perl  
  
use strict;  
use warnings;  
  
while (<DATA>) {  
 1 while s/(\{[^}<]*)<[^}>]*>(?=[^}]*\})/$1/g;  
 print;  
}  
  
__DATA__  
OK: {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> Rauxel} ..  
OK: {Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br> <br>Rauxel} ..  
OK: {Berlin, Bremen} .... {Rom <br> Pisa} .... {Castrop<br> Rauxel} ..  
OK: {Berlin, <br> Bremen} .... {Rom <br><br> Pisa} .... {Castrop<br> Rauxel} ..  
OK: {Berlin, Bremen<br>} .... {Rom - Pisa} .... {Castrop<br> Rauxel} ..  
NICHT OK 1a:{Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br>  
NICHT OK 1b:Rauxel} ..  
NICHT OK 2a:{Berlin, Bremen} .... {Rom - Pisa} .... {Castrop<br  
NICHT OK 2b:>Rauxel} ..  

-- Skeeve