Perl как убрать вложенные теги bbcode? - PullRequest
1 голос
/ 27 сентября 2011

Вот код:

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] здесь. И жирный текст.

Есть ли одно регулярное выражение для удаления тегов?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Если все, что вы хотите сделать, это удалить теги, вам не нужно проверять совпадение тегов: просто удалите все, что находится в квадратных скобках.

Если проверка на вложение действительно важна, вы можетепросто примените текущую замену несколько раз.

1 голос
/ 27 сентября 2011

Как насчет 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";

Таким образом, вам не нужно разбирать текст самостоятельно, что является хорошей вещью ™.

1 голос
/ 27 сентября 2011

Хотите удалить все теги?Элементы могут быть вложенными, но теги не могут быть вложенными, поэтому в этом нет ничего особенного.

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