以下是代码:
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 here.And粗体文本。
有单一的正则表达式来去除标签吗?
发布于 2011-09-27 09:07:45
如果您想要做的只是剥去标记,您就不需要真正确保标记匹配:只需删除方括号内的任何内容即可。
如果检查嵌套是否真的很重要,您可以简单地重复应用当前的替换。
发布于 2011-09-27 09:16:37
你想剥掉所有的标签吗?元素可以嵌套,但标记不能嵌套,因此实际上没有什么。
s/\[[^\[\]]*\]//g;发布于 2011-09-27 12:00:04
更新:
您不需要用这个模块输出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";这样,您就不必自己解析任何文本,这是一件好事,™。
https://stackoverflow.com/questions/7566490
复制相似问题