首页 / 知识
正则表达式以匹配除<p>和</ p>之外的所有HTML标记
2023-04-13 08:18:00

Regex to match all HTML tags exceptand 我需要在Perl中使用正则表达式匹配并删除所有标签。 我有以下几点:
但这仍与结束 标记匹配。 关于如何与结束标记匹配的任何提示? 注意,这是在xhtml上执行的。 如果您坚持使用正则表达式,那么在大多数情况下,这样的方法将起作用:
说明:
但实际上,请您省去一些麻烦,而改用解析器。 CPAN有几个合适的模块。这是使用HTML :: TokeParser模块的示例,该模块具有功能强大的HTML :: Parser CPAN发行版:
HTML :: Parser接受文件名,打开的文件句柄或字符串形式的输入。将以上代码包装在库中并使目标可配置(即,不仅像上述那样 在我看来,尝试用HTML解析器以外的任何其他东西解析HTML只是在痛苦的世界。 HTML是一种非常复杂的语言(这是创建XHTML的主要原因之一,它比HTML简单得多)。 例如,这:
是完整的,100%格式正确,100%有效的HTML文档。 (好吧,它缺少DOCTYPE声明,但除此之外……) 它在语义上等同于
但是,您仍然必须处理有效的HTML。您当然可以设计一个正则表达式来解析它,但是,正如其他人已经建议的那样,使用实际的HTML解析器非常容易。 我想出了这个:
现在,这将处理带有或不带有属性的p标签以及结尾的p标签,但将匹配带有或不带有属性的前置和相似标签。 它不会去除属性,但是我的源数据不会将它们放入。稍后我可能会更改它以执行此操作,但是现在就足够了。 Xetius,复活了这个古老的问题,因为它有一个未提及的简单解决方案。 (在进行正则表达式赏金任务研究时发现了您的问题。) 关于使用正则表达式解析html的所有免责声明,这是一种简单的方法。
观看此现场演示 参考 除情况s1,s2,s3之外如何匹配模式 除非...
我使用了Xetius regex,它工作正常。除了一些flex生成的标签之外,这些标签可以是:
我用它来清除flex生成的html文本中的标签,所以我还添加了更多例外标签:
不确定为什么要这样做-用于HTML净化的正则表达式并不总是最好的方法(您需要记住清理属性等,删除javascript:hrefs之类)...但是,可以匹配HTML的正则表达式不是 的标签:
详细:
HTML不是,但HTML标记是HTML,它们可以用正则表达式充分描述。 由于HTML不是常规语言,因此我不希望正则表达式在匹配它方面做得很好。他们也许有能力完成这项任务(尽管我不敢相信),但我会考虑在其他地方寻找。我确定perl必须有一些现成的库来处理HTML。 无论如何,我认为您要匹配的是?(p。+ |。*)(\ s *。*)>非贪婪(我不知道perl的regexp语法有多变,所以我无济于事进一步)。我假设\ s表示空白。也许不是。无论哪种方式,您都需要某种与标记名称偏移了空白的属性相匹配的属性。但这比这更困难,因为人们经常在脚本和注释甚至是引用的属性值中放上未转义的尖括号,而这是您不希望与之匹配的。 因此,正如我所说,我真的不认为正则表达式是完成这项工作的正确工具。 原始的正则表达式可以很容易地工作:
问题是/? (或\?)在断言失败后放弃匹配的内容。在其周围使用非回溯组(?> ...)时要注意,它绝不会释放匹配的斜杠,因此(?!p)断言始终锚定在标记文本的开头。 (这就是说,我同意通常不使用正则表达式解析HTML)。 您可能还希望在p标记中的" p"之前留空白。不确定您会遇到这种情况的频率,但是 是完全有效的HTML。 假定这将在PERL中起作用,就像在声称使用PERL兼容语法的语言中一样:
编辑:
不幸的是,但这与 这也许吗?
那应该也包含具有属性的 标签。 试试这个,它应该可以工作:
说明:它匹配除" p"之外的单个字母,后跟一个可选的空格和更多字符,或多个字母(至少两个)。
/ EDIT:我已经添加了处理 您可能还应该删除 上的所有属性。
最简单的方法是使用在这里建议的正则表达式搜索带有属性的&ltp>标记,然后将其替换为 没有属性的标签。只是为了安全起见。 |
最新内容
相关内容
python的调用绑定方法和非绑定方法
python的调用绑定方法和非绑定方法,代码,方法,实例,第一,培训,时计,奇数,偶数,参数,定义,在Python中,如果用实例去调用方法,这种限制就被称为PyPython网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tcPython 之模块重载的五种方法
Python 之模块重载的五种方法,环境,培训,方法,模块,文件夹,例子,下面,内容,语句,请看,python环境准备新建一个foo文件夹,其下包含一个bar.py文Python文件读取相关方法
Python文件读取相关方法,数据,位置,文件,中行,培训,方法,字节,内容,结果,字符串,我们知道,对文件的读取操作需要将文件中的数据加载到内存中,而Python 多线程死锁问题的巧妙解决
Python 多线程死锁问题的巧妙解决方法,异常,持有,代码,情况,信息,管理,数据,包装,策略,预期,死锁死锁的原理非常简单,用一句话就可以描述完。列举Python面向对象中带双下划线的
列举Python面向对象中带双下划线的特殊方法,信息,代码,培训,对象,属性,方法,实例,字符串,里边,内容,__new__:生成实例__init__:生成实例的属性_Python重命名和删除文件
Python重命名和删除文件,培训,文件,方法,文件名,语法,模块,例子,参数,以上,两个,python的os模块提供了帮你执行文件处理操作的方法,比如重命名使用Python执行系统命令方法
使用Python执行系统命令方法,系统,信息,培训,标准,命令,方法,模块,操作,终端,中文,Python是一款操作简单的编程语言,内置丰富的库,能够很容易的Python 类的私有属性和方法
Python 类的私有属性和方法,私有化,培训,开头,变量,函数,模块,属性,目的,方法,更多,在Python中,通过单下划线”_”来实现模块级别的私有化,一般关于 Python 配置文件的使用方法
关于 Python 配置文件的使用方法,代码,灵活,项目,名字,培训,模块,程序,方式,内容,用户,很多项目对配置文件的使用做法是:配置文件写在一个或python 列表元素的删除
python 列表元素的删除,代码,数据,位置,连续,异常,首次,培训,元素,列表,空隙,使用del命令删除列表中的指定位置上的元素。>>>a_list=[3,5,7,9python 粘包解决方法
python 粘包解决方法,数据,数字,网络,报头,培训,长度,字节,内容,格式,详细信息,问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所