Fehler gefunden. War doch einfacher als gedacht.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl
use strict;
use warnings;
sub parse
{
my %params = @_;
# my @l=@_; print join('|',@l)."\n----\n";
print "$_ = ".$params{$_}."\n" for keys %params; print "#####\n";
if(exists($params{BILD}))
{ return '<img src='.$params{BILD}.'>'; }
elsif(exists($params{LINK}))
{ return '<a href='.$params{LINK}.'>'.$params{INHALT}.'</a>'; }
elsif(exists($params{ZITAT}))
{ return '<pre>'.$params{INHALT}.'</pre>'; }
elsif(exists($params{HEADLINE}))
{ return '<h>'.$params{INHALT}.'</h>'; }
else
{ return "!!Unbekannter Befehl!!"}
}
my $string =
'
Das ist Martin: [LINK="http://www.test.de" TARGET=_blank]klick hier[/LINK] Sein Bild: [BILD=martin.gif NAME="asd ass as" NAME2=hallo]
Das ist Bärbel: [LINK="http://www.test.de" TARGET=_blank]klick hier[/LINK] Ihr Bild: [BILD=baerbel.gif NAME="asd ass as" NAME2=hallo]
[ZITAT]Dies ist ein Zitat[/ZITAT] oder:
[HEADLINE]Dies ist eine Überschrift[/HEADLINE]
[HEADLINE SIZE=3]text[/HEADLINE]
';
print $string."\n#####\n";
$string =~ s|\[((\w+)\s*(=?)s*(.*?))\](?:(.*?)\[/\2\])?|parse($5?('INHALT',$5):(),$3 ne '='?($2,''):(),$4?(map{split(/\s+(?=\w+$)/,$_)}split(/\s*=\s*/,$3 eq '='?$1:$4)):())|gse;
print $string."\n";
die Variablen $1 usw. werden verändert/gelöscht, wenn man im Ersetzungsstring mit evaluiertem Perl Regexp benutzt. (Ich haben in $3 nach "=" mit einem Regexp gesucht.) Dummer Fehler.