10 回答
TA贡献2021条经验 获得超8个赞
虽然确实要求正则表达式解析任意 HTML就像要求初学者编写操作系统一样,但有时候解析一组有限的已知 HTML 也是合适的。
如果您有一小组HTML页面要从中抓取数据然后填充到数据库中,则正则表达式可能正常工作。例如,我最近想获得澳大利亚联邦代表的名称,政党和地区,我从议会的网站上获取了这些名称,政党和地区。这是一项有限的一次性工作。
正则表达式对我来说效果很好,设置速度非常快。
TA贡献1793条经验 获得超6个赞
我认为这里的缺陷是HTML是Chomsky Type 2语法(无上下文语法),RegEx是Chomsky Type 3语法(常规语法)。由于Type 2语法从根本上比Type 3语法更复杂(参见Chomsky层次结构),因此在数学上不可能使用RegEx解析XML。
但许多人会尝试,有些人甚至会声称成功 - 但直到其他人发现错误并完全搞砸了你。
TA贡献1802条经验 获得超10个赞
不要听这些家伙。如果你将任务分解成更小的部分,你完全可以使用正则表达式解析无上下文的语法。您可以使用脚本生成正确的模式,该脚本按顺序执行以下每个操作:
解决停机问题。
方圆。
计算O(log n)或更少的旅行商问题。如果它不止于此,你将耗尽RAM并且引擎将挂起。
模式将非常大,因此请确保您有一个无损压缩随机数据的算法。
几乎就在那里 - 将整个事物除以零。十分简单。
我自己还没完成最后一部分,但我知道我已经接近了。CthulhuRlyehWgahnaglFhtagnException
由于某种原因,它一直在抛出s,所以我要将它移植到VB 6并使用On Error Resume Next
。一旦我调查刚刚在墙上打开的这扇奇怪的门,我就会用代码更新。嗯。
PS Pierre de Fermat也想出了如何做到这一点,但他写的边距不足以代码。
TA贡献1836条经验 获得超3个赞
这是我使用(!)匹配HTML标记的正则表达式:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>
它可能不完美,但我通过大量 HTML 运行此代码。请注意,它甚至会捕获<a name="badgenerator"">
出现在网络上的奇怪内容。
我想让它与自包含的标签不匹配,你要么想要使用Kobi的负面后卫:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?<!/\s*)>
或者只是组合,如果没有。
对于downvoters:这是来自实际产品的工作代码。我怀疑读这个页面的人会得到这样的印象:在HTML上使用正则表达式是社会可接受的。
警告:我应该注意,在CDATA块,注释,脚本和样式元素存在的情况下,这个正则表达式仍然存在故障。好消息是,你可以摆脱使用正则表达式的人...
- 10 回答
- 0 关注
- 838 浏览
添加回答
举报