为了账号安全,请及时绑定邮箱和手机立即绑定

除了XHTML自包含标记之外,RegEx匹配开放标记

除了XHTML自包含标记之外,RegEx匹配开放标记

米琪卡哇伊 2019-05-20 13:43:41
我需要匹配所有这些开始标记:<p><a href="foo">但不是这些:<br /><hr class="foo" />我想出了这个,并希望确保我做对了。我只抓住了a-z。<([a-z]+) *[^/]*?>我相信它说:找一个小于,然后然后,查找(并捕获)az一次或多次然后找到零个或多个空格找到任何字符零次或多次,贪婪/,然后找到一个大于我有这个权利吗?更重要的是,你怎么看?
查看完整描述

10 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

虽然确实要求正则表达式解析任意 HTML就像要求初学者编写操作系统一样,但有时候解析一组有限的已知 HTML 也是合适的。

如果您有一小组HTML页面要从中抓取数据然后填充到数据库中,则正则表达式可能正常工作。例如,我最近想获得澳大利亚联邦代表的名称,政党和地区,我从议会的网站上获取了这些名称,政党和地区。这是一项有限的一次性工作。

正则表达式对我来说效果很好,设置速度非常快。


查看完整回答
反对 回复 2019-05-20
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我认为这里的缺陷是HTML是Chomsky Type 2语法(无上下文语法),RegEx是Chomsky Type 3语法(常规语法)。由于Type 2语法从根本上比Type 3语法更复杂(参见Chomsky层次结构),因此在数学上不可能使用RegEx解析XML。

但许多人会尝试,有些人甚至会声称成功 - 但直到其他人发现错误并完全搞砸了你。


查看完整回答
反对 回复 2019-05-20
?
守候你守候我

TA贡献1802条经验 获得超10个赞

不要听这些家伙。如果你将任务分解成更小的部分,你完全可以使用正则表达式解析无上下文的语法。您可以使用脚本生成正确的模式,该脚本按顺序执行以下每个操作:

  1. 解决停机问题。

  2. 方圆。

  3. 计算O(log n)或更少的旅行商问题。如果它不止于此,你将耗尽RAM并且引擎将挂起。

  4. 模式将非常大,因此请确保您有一个无损压缩随机数据的算法。

  5. 几乎就在那里 - 将整个事物除以零。十分简单。

我自己还没完成最后一部分,但我知道我已经接近了。CthulhuRlyehWgahnaglFhtagnException由于某种原因,它一直在抛出s,所以我要将它移植到VB 6并使用On Error Resume Next。一旦我调查刚刚在墙上打开的这扇奇怪的门,我就会用代码更新。嗯。

PS Pierre de Fermat也想出了如何做到这一点,但他写的边距不足以代码。


查看完整回答
反对 回复 2019-05-20
?
米脂

TA贡献1836条经验 获得超3个赞

这是我使用(!)匹配HTML标记的正则表达式:

<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>

它可能不完美,但我通过大量 HTML 运行此代码。请注意,它甚至会捕获<a name="badgenerator"">出现在网络上的奇怪内容。

我想让它与自包含的标签不匹配,你要么想要使用Kobi的负面后卫:

<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?<!/\s*)>

或者只是组合,如果没有。

对于downvoters:这是来自实际产品的工作代码。我怀疑读这个页面的人会得到这样的印象:在HTML上使用正则表达式是社会可接受的。

警告:我应该注意,在CDATA块,注释,脚本和样式元素存在的情况下,这个正则表达式仍然存在故障。好消息是,你可以摆脱使用正则表达式的人...


查看完整回答
反对 回复 2019-05-20
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

我建议使用QueryPath在PHP中解析XML和HTML。它与jQuery的语法基本相同,只是在服务器端。


查看完整回答
反对 回复 2019-05-20
  • 10 回答
  • 0 关注
  • 838 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信