#!/usr/bin/perl use strict; use warnings; sub parse { my %params = @_; print "$_ = ".$params{$_}."\n" for keys %params; print "#####\n"; if(exists($params{BILD})) { unless (-e $params{BILD}) { return "!!Unbekannte Datei!!"; } } elsif(exists($params{LINK})) { return ''.$params{INHALT}.''; } 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] '; print $string."\n#####\n"; $string =~ s!\[((\w+).+?)\](?:(.+?)\[/\2\])?!parse((map{split(/\s+(?=\w+$)/,$_)}split(/\s*=\s*/,$1)),$3?('INHALT',$3):())!gse; print $string."\n";