Regex 使用perl正则表达式删除标记之间的字符串

Regex 使用perl正则表达式删除标记之间的字符串,regex,perl,Regex,Perl,给定如下输入字符串: "blah <b>abc <i>foo</i> GETME bar </b> GETME <b>something else</b>" “废话abc foo GETME bar GETME其他东西” 我想编写一个PERL正则表达式,生成如下结果字符串: "blah <b>abc <i>foo</i> bar </b> GETME <b>s

给定如下输入字符串:

"blah <b>abc <i>foo</i> GETME bar </b> GETME <b>something else</b>"
“废话abc foo GETME bar GETME其他东西”
我想编写一个PERL正则表达式,生成如下结果字符串:

"blah <b>abc <i>foo</i>  bar </b> GETME <b>something else</b>
“废话abc foo bar给我点别的
其中
之间的“GETME”已被删除。基本上,我希望删除起始
和结束
标记之间的所有“GETME”实例

我看到有一个“平衡”的方案来解决这个问题,但这似乎有些过头了。有更简单的解决方案吗

比如:

$teststr =~ s/(<b>[^>]*?)GETME(.*?<\/b>)/$1$2/g;
$teststr =~ s/<b>(.*?)</b>/{$1 =~ s/GETME//g}/g;
$teststr=~s/([^>]*?)GETME(.*)/$1$2/g;
但只有在
之间没有像
这样的嵌套标记时,才有效

理想情况下,我可以写以下内容:

$teststr =~ s/(<b>[^>]*?)GETME(.*?<\/b>)/$1$2/g;
$teststr =~ s/<b>(.*?)</b>/{$1 =~ s/GETME//g}/g;
$teststr=~s/(.*)/{$1=~s/GETME//g}/g;

我嵌套了另一个正则表达式,但如果可能的话,我不知道语法。

使用解析器,例如,
XML::Twig

#!/usr/bin/env perl;

use strict;
use warnings;
use XML::Twig;

my $twig = XML::Twig->new(
    twig_roots => {
        'b' => sub {
            $_->subs_text( qr{\bGETME\b}, '' );
            $_->print;
        },  
    },  
    twig_print_outside_roots => 1,
)->parse(
    '<root>blah <b>abc <i>foo</i> GETME bar </b> GETME <b>something</b></root>'
);
#!/usr/bin/env perl;
严格使用;
使用警告;
使用XML::Twig;
my$twig=XML::twig->new(
细枝根=>{
“b”=>sub{
$文本->子文本(qr{\bGETME\b},”;
$\->打印;
},  
},  
细枝打印在根外=>1,
)->解析(
“废话abc foo GETME bar GETME something”
);
它产生:

<root>blah <b>abc <i>foo</i>  bar </b> GETME <b>something</b></root>
废话abc foo bar给我点东西

阅读此内容:我首选的解析器是
HTML::TokeParser
感谢您的回复-我会尝试一下。