首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl如何剥离嵌套的bbcode标记?

Perl如何剥离嵌套的bbcode标记?
EN

Stack Overflow用户
提问于 2011-09-27 08:54:58
回答 3查看 345关注 0票数 1

以下是代码:

代码语言:javascript
复制
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粗体文本。

有单一的正则表达式来去除标签吗?

EN

回答 3

Stack Overflow用户

发布于 2011-09-27 09:07:45

如果您想要做的只是剥去标记,您就不需要真正确保标记匹配:只需删除方括号内的任何内容即可。

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

票数 2
EN

Stack Overflow用户

发布于 2011-09-27 09:16:37

你想剥掉所有的标签吗?元素可以嵌套,但标记不能嵌套,因此实际上没有什么。

代码语言:javascript
复制
s/\[[^\[\]]*\]//g;
票数 1
EN

Stack Overflow用户

发布于 2011-09-27 12:00:04

解析::BBCode

更新:

您不需要用这个模块输出HTML。相反,请尝试以下几点:

代码语言:javascript
复制
#!/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";

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7566490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档