以下是代码:
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。
是否有一个正则表达式来剥离标签?
答案 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";
这样您就不必自己解析任何文本,这是一件好事。