>perl -wMstrict -le
"my $s =
'foobar baz \"x\" %&*';
print qq{'$s'};
;;
$s =~ s{ < ([^>]+) > ((?: (?! \1) .)*) \1 > }{$2}xmsg;
print qq{'$s'};
;;
;;
$s = 'foo b > bar \"stuff\" *&! Cd>';
print qq{'$s'};
;;
my @tags = qw(b cd);
my $tag = join '|', @tags;
$tag = qr{ (?i) $tag }xms;
use re 'eval';
$s =~ s{ < \s* ($tag) \s* >
((?: (?! \s* \1) .)*)
\s* ([^>]*) (?(?{ lc($1) ne lc($^N) }) (*F)) \s* >
}
{$2}xmsg;
print qq{'$s'};
"
'foobar baz "x" %&*'
'foobar baz "x" %&*'
'foo b > bar "stuff" *&! Cd>'
'foo bar "stuff" *&!'
####
>perl -wMstrict -le
"my $s =
'foo b > bar \"stuff\" *&! Cd> baz';
print qq{'$s'};
;;
my $ar_tag_delete_content = [ 1, tag_group_regex(qw(efg) ) ];
my $ar_tag_leave_content = [ 0, tag_group_regex(qw(b cd)) ];
;;
for my $pass ($ar_tag_leave_content, $ar_tag_delete_content) {
my ($delete_content, $tag) = @$pass;
use re 'eval';
$s =~ s{ < \s* ($tag) \s* >
((?: (?! \s* \1) .)*)
\s* ([^>]*) (?(?{ lc($1) ne lc($^N) }) (*F)) \s* >
}
{ $delete_content ? '' : $2 }xmsge;
print qq{'$s'};
}
;;
sub tag_group_regex {
my $alternation = join '|', @_;
return qr{ (?i) $alternation }xms;
}
"
'foo b > bar "stuff" *&! Cd> baz'
'foo bar "stuff" *&! baz'
'foo "stuff" *&! baz'
##
##
>perl -wMstrict -le
"my @strings = (
'foo b > bar \"stuff\" *&! Cd> baz',
'fee P fie Q foe R fum S',
'hee W hie X hoe Y hum Z',
);
;;
my $ar_keep_tag_content = [ 1, tag_group_regex(qw(b cd)) ];
my $ar_kill_tag_content = [ 0, tag_group_regex(qw(efg) ) ];
;;
for my $s (@strings) {
print qq{'$s'};
for my $pass ($ar_keep_tag_content, $ar_kill_tag_content) {
my ($keep_content, $tag) = @$pass;
$s =~ s{ < \s* ($tag) \s* > (.*?) \s* (?i) \1 \s* > }
{ $keep_content ? $2 : '' }xmsge;
print qq{'$s'};
}
print '';
}
;;
sub tag_group_regex {
my $alternation = join '|', @_;
return qr{ (?i) $alternation }xms;
}
"
'foo b > bar "stuff" *&! Cd> baz'
'foo bar "stuff" *&! baz'
'foo "stuff" *&! baz'
'fee P fie Q foe R fum S'
'fee P fie Q foe R fum S'
'fee P fie Q R S'
'hee W hie X hoe Y hum Z'
'hee W hie X hoe Y hum Z'
'hee W hie X Y Z'