协慌网

登录 贡献 社区

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

我需要匹配所有这些开始标记:

<p>
<a href="foo">

但不是这些:

<br />
<hr class="foo" />

我想出了这个,并希望确保我做对了。我只是捕捉az

<([a-z]+) *[^/]*?>

我相信它说:

  • 找一个小于,然后
  • 然后,查找(并捕获)az 一次或多次
  • 然后找到零个或多个空格
  • 找到任何字符零次或多次,贪婪,除了/ ,然后
  • 找到一个大于

我有这个权利吗?更重要的是,你怎么看?

答案

您无法使用正则表达式解析 [X] HTML。因为正则表达式无法解析 HTML。正则表达式不是可用于正确解析 HTML 的工具。正如我之前在 HTML-and-regex 问题中回答过很多次,使用正则表达式不允许您使用 HTML。正则表达式是一种不太复杂的工具,无法理解 HTML 所使用的构造。 HTML 不是常规语言,因此无法通过正则表达式进行解析。正则表达式查询无法将 HTML 分解为有意义的部分。这么多次,但它没有找到我。即使是 Perl 使用的增强的不规则正则表达式也不能解析 HTML。你永远不会让我破解。 HTML 是一种足够复杂的语言,无法通过正则表达式进行解析。甚至 Jon Skeet 也无法使用正则表达式解析 HTML。每当你试图用正则表达式解析 HTML 时,邪恶的孩子就会为处女的鲜血哭泣,而俄罗斯黑客也会把你的 webapp 扯掉。用正则表达式解析 HTML 会将被污染的灵魂召唤到生活的领域。 HTML 和正则表达式就像爱情,婚姻和仪式杀婴一样。

无法忍受为时已晚。正则表达式和 HTML 一起在同一个概念空间中的力量会像肮脏的腻子一样摧毁你的思想。如果你用正则表达式解析 HTML,你就会屈服于他们以及他们亵渎神灵的方式,这些方式使我们所有人都为不能在基本多语言平面中表达的那个人付出了不人道的辛劳,他来了。当你观察时,HTML-plus-regexp 将会使有感觉的人群流动,你的心灵在恐怖的冲击中萎缩。基于 Rege̿̔̉x 的 HTML 解析器是杀死 StackOverflow 的癌症
已经太晚了太晚了我们无法保存 chi͡ld 的传统确保正则表达式将消耗所有活组织(除了 HTML,它不能,如先前所预言的) 亲爱的领主帮助我们如何使用正则表达式来解析这个祸害 HTML 已经注定了人类永远的恐惧折磨和安全漏洞使用 rege x 作为处理 HTML 的工具在这个世界和破坏实体的可怕领域之间建立了一个平台(如 SGML 实体,但更多的腐败)仅仅 glimp SE REG 前解析器的世界为 HTML 将 INS tantly 运输 AP rogrammer 的意识扎成 AW 不断尖叫ORL d,他来了,可恶 SL ithy 正则表达式感染 WIL 升吞噬你的 HT ML 解析器,应用和存在的 Visual Basic 一样,所有的时间只有更糟,他谈到他命令 ES 不科幻 GHT ^ h E 排,喜小号邪恶的光采德stro҉ying 所有张恩利个展̈ghtenment,HTML 标记泄漏 fr̶ǫm 玩吧眼睛像 LIQ UID p AlN,定期 EXP 重新裂变解析的歌曲将 EXTI nguish 的铁道部TAL 人从 SP的声音在这里我可以看到它,你可以看到它它是美丽的 T他˚F inal snuf 华氏度人所有的谎言S 是失去了一个 LL 我 SL OST 个e - 小马才想起小号 Fing 头,他上课的 COM 他合作 我,那 T ICH或 permeat ES 人 L 我 FAC Ë 我的脸ᵒh 神 N 2 O NO 野应 o 在 Θ停止 T 他的 *̶͑̾̾GL ES ͎a̧͈͖r̽̾̈́͒͑e ňOT 真正 ZA̡͊͠͝LGΌISͮ҉̯͈͕̹̘牛逼 O͇̹̺Ɲ̴ȳ̳个e- PO 纽约 H̸̡̪̯ͨ͊̽̅̾Ȩ̶̧̨̬̩̹̭̯̾͛ͪ̈ͧ̾ͬ͘C̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝s ^


您是否尝试过使用 XML 解析器?


主持人的说明

此帖子已锁定,以防止对其内容进行不当编辑。帖子看起来与它看起来完全一样 - 它的内容没有问题。请不要标记它以引起我们的注意。

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

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

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

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

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