Perl如何剥离嵌套的bbcode标签?

时间:2011-09-27 08:54:58

标签: regex perl bbcode

以下是代码:

use perl5i::2;

my $string = '[size 9]Some larger text. [i]Italic[/i] here.[/size]And [b]bold[/b] text.';
$string =~ s/\[(.+).*?\](.+)\[\/\1\]/$2/gi;

$string->say; 

结果在这里:

  

一些较大的文字。 [i] Italic [/ i] here.And bold text。

是否有一个正则表达式来剥离标签?

3 个答案:

答案 0 :(得分:2)

如果要删除标记,则不需要确保标记匹配:只需删除方括号内的任何内容。

如果检查嵌套确实很重要,您可以简单地重复应用当前替换。

答案 1 :(得分:1)

你想剥去所有标签吗?元素可以嵌套,但标签不能嵌套,所以实际上没有任何内容。

s/\[[^\[\]]*\]//g;

答案 2 :(得分:1)

Parse::BBCode怎么办?

更新

您无需使用此模块输出HTML。请尝试以下方法:

#!/usr/bin/perl

use strict;
use warnings;

use Parse::BBCode;

my %tags = map { $_ => '%s' } qw(
    b i u color size font highlight left right center indent email url thread post
    list img video code php html quote noparse attach bug PGN2 PGN3 threadvb wiki
);
my $parser = Parse::BBCode->new ( { tags => \%tags } );

my $string = '[size="9"]Some larger text. [i]Italic[/i] here.[/size]And [b]bold[/b] text.';
my $rendered = $parser->render( $string );

print "$rendered\n";

这样您就不必自己解析任何文本,这是一件好事。