Regex: BBCode parsen
split.s
- perl
0 Beat
Hab hier einen einfachen BBCode-Regex.
my @allowedTags = ('b', 'i');
for (@allowedTags) {
$text =~ s{
\[$_\](.+?)\[$_\]
} {
replace($_,$1)
}egsx;
}
Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:
[$_](.+?)[$_]
Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:
^[code].*[$_](.+?)[$_].*^[code]
Bin allerdings wie man sieht nicht so der regex-könner :D
Hab hier einen einfachen BBCode-Regex.
my @allowedTags = ('b', 'i');
for (@allowedTags) {
$text =~ s{
[$](.+?)[$]
} {
replace($_,$1)
}egsx;
}
>
> Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:
> \[$\_\](.+?)\[$\_\]
>
> Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:
>
> ^\[code\].\*\[$\_\](.+?)\[$\_\].\*^\[code\]
Wenn jeder Code in jedem Code geparst werden soll, musst du rekursiv parsen.
Deine Regex finde ich übrigens seltsam. du matcht auf [b]text[b]
wo du eventuell [b]text[/b] meinst
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Hab hier einen einfachen BBCode-Regex.
my @allowedTags = ('b', 'i');
for (@allowedTags) {
$text =~ s{
[$](.+?)[$]
} {
replace($_,$1)
}egsx;
}
> >
> > Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:
> > \[$\_\](.+?)\[$\_\]
> >
> > Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:
> >
> > ^\[code\].\*\[$\_\](.+?)\[$\_\].\*^\[code\]
>
> Wenn jeder Code in jedem Code geparst werden soll, musst du rekursiv parsen.
>
> Deine Regex finde ich übrigens seltsam. du matcht auf [b]text[b]
> wo du eventuell [b]text[/b] meinst
>
> mfg Beat
Sorry, da ist auch ein Schreibfehler drin. Es muss heissen:
\[$\_\](.+?)\[/$\_\]
Nun meine nächste Frage: Wie meinst du das mit rekursives parsen?
你好 split.s,
Nun meine nächste Frage: Wie meinst du das mit rekursives parsen?
Dass es mit einem Regex so einfach nicht geht. Du musst mindestens mit einer Stackmaschine arbeiten. Aber ich würde dir einfach zu einem der BBCode-Module raten.
再见,
克里斯蒂安