Perl 如何去除嵌套的 bbcode 标签?

发布于 2024-12-07 00:12:09 字数 313 浏览 0 评论 0原文

这是代码:

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]斜体[/i]。文本为粗体。

是否有一个正则表达式可以去除标签?

Here is the code:

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; 

The result is here:

Some larger text. [i]Italic[/i] here.And bold text.

Is there a single regex to strip the tags?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

路还长,别太狂 2024-12-14 00:12:09

如果您只想删除标签,则实际上不需要确保标签匹配:只需删除方括号内的任何内容即可。

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

If all you want to do is strip the tags, you don't really need to ensure that the tags match: just remove anything inside square brackets.

If checking for nesting really is important, you can simply apply your current substitution repeatedly.

孤凫 2024-12-14 00:12:09

您想删除所有标签吗?元素可以嵌套,但标签不能嵌套,所以实际上没有什么。

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

Do you want to strip all tags? Elements can be nested, but tags can't be nested, so there's nothing to it really.

s/\[[^\[\]]*\]//g;
无可置疑 2024-12-14 00:12:09

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";

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

What about Parse::BBCode?

Update:

You don't need to output HTML with this module. Try the following instead:

#!/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";

This way you don't have to parse any text yourself, which is a Good Thing™.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文