如何使用 Perl 正则表达式删除未使用的嵌套 HTML span 标记?

2023-11-29

我正在尝试从 HTML 文件中删除未使用的跨度(即那些没有属性的跨度),并且已经用其他正则表达式清理了我不需要的所有属性。

我的正则表达式有问题,没有选择要删除的正确的开始和结束标签对。

my $a = 'a <span>b <span style="color:red;">c</span> d</span>e';
$a =~ s/<span\s*>(.*?)<\/span>/$1/g;
print "$a\

returns

a b <span style="color:red;">c d</span>e

但我想让它回来

a b <span style="color:red;">c</span> de

帮助表示赞赏。


Try HTML::解析器:

#!/usr/bin/perl

use strict;
use warnings;

use HTML::Parser;

my @print_span;
my $p = HTML::Parser->new(
  start_h   => [ sub {
    my ($text, $name, $attr) = @_;
    if ( $name eq 'span' ) {
      my $print_tag = %$attr;
      push @print_span, $print_tag;
      return if !$print_tag;
    }
    print $text;
  }, 'text,tagname,attr'],
  end_h => [ sub {
    my ($text, $name) = @_;
    if ( $name eq 'span' ) {
      return if !pop @print_span;
    }
    print $text;
  }, 'text,tagname'],
  default_h => [ sub { print shift }, 'text'],
);
$p->parse_file(\*DATA) or die "Err: $!";
$p->eof;

__END__
<html>
<head>
<title>This is a title</title>
</head>
<body>
<h1>This is a header</h1>
a <span>b <span style="color:red;">c</span> d</span>e
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Perl 正则表达式删除未使用的嵌套 HTML span 标记? 的相关文章

随机推荐

  • Spring Kafka - 在运行时订阅新主题

    我正在使用注释 KafkaListener使用我的应用程序上的主题 我的问题是 如果我在 kafka 中创建一个新主题 但我的消费者已经在运行 那么消费者似乎不会选择新主题 即使它与topicPattern我在用着 有没有办法定期 刷新 订
  • JavaScript 匿名函数中的 this 值

    谁能向我解释为什么A是真的并且B是假的吗 我本以为 B 也是如此 function MyObject MyObject prototype test function console log A this instanceof MyObje
  • 如何通过单击按钮打开 Whatsapp 群组?

    我制作了一个简单的电话簿 并且可以通过单击按钮打开 Whatsapp 联系人 这是示例代码 Intent intentWhatsapp new Intent android intent action MAIN intentWhatsapp
  • 覆盖默认身份表名称

    我想重命名默认的身份表名称 AspNet角色 AspNet用户索赔 AspNet用户登录 AspNet用户角色 AspNet用户 我了解如何使用 EF6 执行此操作 protected override void OnModelCreati
  • 跨域单选登录

    它不是我正在寻找的明确的跨域会话 但它是解释我想要的内容的最简单方法 我有一个创建网站的系统 这些网站托管在许多不同的服务器上 用户可以创建他们的帐户 然后他们可以创建很多网站 他们可以创造 www mysite com 子域名 mysit
  • Guice:如何在没有注入器或使用构造函数注入的情况下获取单例实例

    我有一个单例类定义为 Singleton class MySingletonClass 我有另一个使用此单例类的类 但必须使用 new 运算符创建该类 因此我不能使用构造函数注入或设置器注入等 class MyClass public vo
  • Javascript 查找链接的颜色

    所以我遇到的问题基本上已经解决了 我有一个 HTML 格式的外部网站列表 如下所示 a href http google com au http google com au a br a href http stackoverflow co
  • React-router-Dom:在 React 中重定向多个用户登录后的空白页面

    我的反应项目中有两个 用户和管理员 用户 我想在成功登录后将他们重定向到他们受尊重的页面 为了实现这一目标 我创建了一个名为的独立组件authenticatedRoute js并通过 AuthenticatedRoute 组件包装这些组件
  • PL/SQL 中的转义下划线

    我有一个与此类似的 oracle 触发器 AFTER INSERT OR UPDATE ON TABLE ABC FOR EACH ROW BEGIN IF new COLUMN A LIKE H THEN INSERT INTO TABL
  • 无法从 boost 子进程获取分段错误退出代码

    当子进程由于分段违规或除数为零或任何其他终止信号而被终止时 我试图获取子进程的退出代码 使用 boost process 和 boost asio 退出代码和错误代码始终返回 0 和成功 我在 CentOS 7 上使用 g 4 8 5 和
  • 将 hashmap 转换为 JSON 对象时从 Gson 获取 stackoverflowerror

    我想将树结构中的数据表示为 java 对象 然后我想将其转换为 JSON 对象 在 stackoverflow 条目的帮助下 将父 子关系的java arrayList转换为树 使用 GSON 将 hashmap 转换为 JSON 我有以下
  • 在 C 中为 Fortran 可分配内存分配内存

    我们试图在 C 中接管旧版 Fortran 代码 100 000 行代码 的内存分配 因为我们使用 C 库在集群上分区和分配分布式内存 可分配的变量在模块中定义 当我们调用使用这些模块的子例程时 索引似乎是错误的 移动了一位 然而 如果我们
  • Vue.js - 同一路线上的两个不同组件

    我试图弄清楚如何使用 Vue 在同一条路线上拥有 2 个不同的组件 主页或登录页面 取决于用户是否经过身份验证 也许我在文档中遗漏了一些东西 但我无法也无法弄清楚 有可能吗 Thx 在路由器映射中使用 auth 参数 router map
  • Azure 数据工厂 V2 检查复制活动的文件大小

    我需要对本地数据源中的文件运行复制活动 我需要检查文件大小 如果大小大于 0 则复制它们 如果文件大小为 0 我将发送通知 以便管理员检查源 问题是 在 获取元数据 活动中 字段列表中的参数不包括大小 此外 验证活动也不查找大小属性 有什么
  • Spyder 4 绘图窗格不显示

    使用 Spyder 4 它不再在控制台上方显示 绘图 窗格 我已确保后端设置为内联 但窗格仍然不显示 如果有人知道任何解决方案 将不胜感激 Spyder 维护者在这里 您需要进入菜单View gt Panes并激活与绘图窗格相对应的条目
  • java中如何比较两个日期?

    我正在尝试比较两个日期 我只想比较日期部分而不是时间部分 这就是我在程序中存储日期的方式 Thu Jan 27 23 20 00 GMT 2011 我有一个 ArrayList
  • g++ 关于声明多维双精度数组的警告

    在我的 C 程序中 我试图初始化一个全为 0 的 double 类型的 3 3 3 数组 在类头文件中 我声明了一个成员 double list 3 3 3 当我打印出这个数组的内容时 我发现并非所有条目都如我所料为0 例如list 1 1
  • Mkmapview 半页卷曲[重复]

    这个问题在这里已经有答案了 可能的重复 如何在iPhone中制作像地图应用程序一样的半卷曲动画 我需要在地图视图中实现半页卷曲 就像 Google 地图应用程序一样 我实施UIViewAnimationTransitionCurlUp UI
  • 如何获取phonegap中的当前位置?

    我在我的应用程序中添加了地理定位插件 并使用此代码来获取phonegap中的当前位置 但这段代码不起作用 document addEventListener deviceready onDeviceReady false function
  • 如何使用 Perl 正则表达式删除未使用的嵌套 HTML span 标记?

    我正在尝试从 HTML 文件中删除未使用的跨度 即那些没有属性的跨度 并且已经用其他正则表达式清理了我不需要的所有属性 我的正则表达式有问题 没有选择要删除的正确的开始和结束标签对 my a a span b span style colo