aber wie ersetzt man alle "suchstrings" im gegebenen bereich?
sagen wir - wie entfernt man alle <br> zwischen <pre></pre>?
soweit habe ich es gedacht,, aber weiter?
preg_replace("/<pre>(<bre>+?)</pre>", " ", $string);
Ich verwende positive Lookahead und Lookbehind Assertions.
Was zwischen <pre> ist, wird an eine Sub weiter gereicht, aber nur wenn notwendig.
In PHP kanst du etwas ähnliches mit: preg\_replace\_callback() machen
Handbuch:
mixed preg\_replace\_callback ( mixed $Suchmuster, callback $Callback, mixed $Zeichenkette [, int $Limit [, int &$Anzahl]] )
Limit ist per Standard -1 also unbegrenzt, wird alles matchen
Meine Perl Implementation:
~~~perl
#!C:/Programme/Perl/bin/perl.exe -w
#
use strict;
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>error.txt") or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
my $string = "abc <pre> xxx <br> yyy <br>zzz </pre> abc <pre>123</pre> abc";
$string =~ s#(?<=<pre>)(.*?<br>.*?)(?=</pre>)#convert_br_to_nl($1)#eg;
sub convert_br_to_nl{
my $t = shift;
$t =~ s/<br>/\n/g;
return $t;
}
print $string, "\n";
sleep(10);
exit;
__END__
mfg Beat