我需要满足所有的这些开始标记︰

<p>
<a href="foo">

但不是这些︰

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

我提出与此,想要确保我已经放置正确。我只捕获a-z.

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

我相信它指出︰

  • 查找小于-比,然后
  • 将 a 到 z 一次或多次,然后找到 (并捕获)
  • 然后找到零个或多个空格,
  • 然后查找任何字符零个或更多时间,贪婪,除/
  • 查找大于-比

我有此权限吗?并且,更重要的是,您认为什么?

2008-09-20 15:00:47
问题评论:

回答:

You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML. Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions. Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. HTML-plus-regexp will liquify the n​erves of the sentient whilst you observe, your psyche withering in the onslaught of horror. Rege̿̔̉x-based HTML parsers are the cancer that is killing StackOverflow it is too late it is too late we cannot be saved the trangession of a chi͡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes using regex as a tool to process HTML establishes a breach between this world and the dread realm of c͒ͪo͛ͫrrupt entities (like SGML entities, but more corrupt) a mere glimpse of the world of reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he com̡e̶s, ̕h̵i​s un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, HTML tags lea͠ki̧n͘g fr̶ǫm ̡yo​͟ur eye͢s̸ ̛l̕ik͏e liq​uid pain, the song of re̸gular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL I​S LOST the pon̷y he comes he c̶̮omes he comes the ich​or permeates all MY FACE MY FACE ᵒh god no NO NOO̼O​O NΘ stop the an​*̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e n​ot rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ


已尝试使用 XML 解析器而不吗?


仲裁人的注意

这篇文章被锁定以防止不恰当的编辑其内容。它应该看起来-有其内容没有问题的样子,看上去开机自检。请不要不标记为我们关注。

Kobi︰ 我认为这是我退出的张贴内容的助手不解析 HTML 与正则表达式官的时间。无论我们说多少次,他们不能阻止即将...每天甚至每小时。它是其他人可以占据一位不明原因。因此转,如果有必要,使用正则表达式,分析 HTML。它仅具有分解代码、 没有生命和死亡。

是否可以使用正则表达式来分析此回答?

如果看不到这篇文章,下面是它的全貌捕捉︰ imgur.com/gOPS2.png

@Art: meta.stackexchange.com/questions/18382/...

虽然,询问 regexes 分析任意HTML 就像询问先生 Bean 编写操作系统,有时是 HTML 的适当分析一套有限的、 已知

如果您有少量要刮中的数据,然后填充到数据库中的 HTML 页,regexes 可能正常工作。例如,我最近想获取名称、 相关方和地区的澳大利亚联邦的代表,我有离开议会的网站。这是一个有限的一次性作业。

Regexes 对我来说,还只是正常工作,并且很快就能建立。

此外,抓取操作相当定期带格式的数据,从大型文档将要进行的方式更快地通过明智地使用扫描和正则表达式比任何通用分析程序。并且,如果您习惯于使用编码 regexes,这样比编码 xpath 代码快。并对被抓取的操作的变化几乎肯定不太脆弱。这样 bleh。

@MichaelJohnston"太脆弱"?几乎可以肯定不会。以静默方式可以忽略 Regexes 担心文本格式比 XML 分析程序的详细信息。&foo;编码和CDATA节之间切换?使用 HTML minifier 浏览器不呈现您文档中移除所有空白?XML 分析器将不会介意,也做不编写完善的 XPath 语句。基于正则表达式"分析器",另一只手上的...

@CharlesDuffy 的一次作业的确定,和我们使用的空格 s+

@xiaomao 实际上,如果不必知道所有的陷阱和替代方法来获取一种 80%解决方案失败的时间"为您的工作"的其余部分,我不能阻止您。同时,我通过我侧的围墙使用 100%的语法上有效的 XML 处理的分析程序。

一次,我不得不拉关闭大约 10 k 页面,所有使用相同的 HTML 模板的某些数据。他们已散落与 HTML 错误导致分析器浅压深和所有其样式设置为内联或<font>等︰ 任何类或 Id 定位 dom。之后反击整天与"正确"的做法,我最后切换到一个正则表达式的解决方案,必须在一小时内使用它。

我认为这样做的缺陷是,HTML 是Chomsky 类型 2 语法 (上下文无关的语法) ,正则表达式是Chomsky 类型 3 语法 (正则语法)由于类型 2 语法是从根本上比 3 语法更为复杂 (见Chomsky 层次结构),您可能无法进行此项工作。但很多会,一些会声称成功和其他人将查找故障和完全您搞砸。

正在请求 OP 分析非常有限的子集的 XHTML︰ 开始标记。是什么使得 (X) HTML CFG 是它可能会有元素 (如中所示的语法规则, A -> s A e) 其他元素的开始和结束标记之间。(X)HTML does具有此属性开始标记︰ 一个开始标记不能包含其他开始标记。OP 尝试分析子集不 CFG。

在 CS 理论,正则语言严格子集上下文可用的语言,但在主流编程语言中的正则表达式实现更强大。所述noulakaz.net/weblog/2007/03/18/... ,所谓"正则表达式"可以检查中一元,质数肯定是从 CS 理论的正则表达式不能完成的事情。

@eyelidlessness︰ 同一"仅在"适用于所有 CFGs,它不?即如果 (X) HTML 输入格式不正确,甚至不是一个全面的 XML 分析器将能可靠地工作。也许如果您就举出一些例子"(X) HTML 语法错误在实际应用中用户代理中实现"指,我就会明白您获得在更好的。

@AdamMihalcin 是完全正确的。大多数现有的正则表达式引擎是 Chomsky 类型 3 语法 (如非贪婪匹配,backrefs) 比功能更强大。(如 Perl) 某些正则表达式引擎将执行完成。这是真的,甚至是很差的工具,用于分析 HTML,但此软-引用参数不是原因为什么。

这是最"完整和短"答案此处。它引导人学会正式语法的基本知识和语言和但愿一些数学因此他们不 wast hopeless 等在多项式时间内解决 NP 任务上的时间

不要听这些专家。如果您将任务分成更小的部分,实际上可以分析上下文自由与正则表达式的语法。您可以生成正确的方式与每个按顺序执行的脚本︰

  1. 停止后问题解决了。
  2. 方形圆 (此模拟"标尺和指南针"方法)。
  3. 在 O (日志 n) 在旅行商问题的工作。它需要能够快速或生成器将挂起。
  4. 该模式将会相当大,所以请确保具有无损压缩的随机数据的算法。
  5. 差不多就这样了-只是除数的整件事情为零。简单 peasy。

我尚未查明的问题的最后一部分,但我知道我收到关闭。我的代码保持引发CthulhuRlyehWgahnaglFhtagnExceptions 最近,所以我打算到 VB 6 的端口并使用On Error Resume Next我调查只是在墙上的插座中打开此奇怪门后,我将更新的代码。嗯。

P.S.圣皮埃尔 de Fermat 还想到了如何做到这一点,但他写中的边距不是足够大的代码。

很有点容易减少一切与;) 回答

通过零 Divison 是更容易比其他你刚才提到的问题。如果您使用的时间间隔,而不是纯浮动点算术运算 (其中每个人都应该是,但人),您可以不假思索地除以东西 [时间间隔包含] 零。其结果是只包含正、 负无穷大的时间间隔。

Fermat 的小边距问题已经解决的现代文字编辑软件中的软边距。

Fermat 的小边距有已解决问题任 Munroe 通过将字号设置为零︰ xkcd.com/1381

注意︰ Fermat 的问题实际上已经解决于 1995 年,而且它只花费数学家 358 年这样做。

免责声明︰ 如果您可以选择使用一个分析器。这么说...

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

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

它可能不是十分完美,但我经历了很多的 HTML 中运行此代码。注意,它甚至是奇怪的东西的挡<a name="badgenerator"">,它出现在 web 上。

我想要使其与自包含标记不匹配,或者想要使用Kobi负外观隐藏︰

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

或如果不只是组合。

到 downvoters:这是从一种实际产品的工作代码。我怀疑任何人读取此页会得到这样一个印象︰ 它是社会可以接受在 HTML 中使用 regexes。

注意︰ 我应该注意,此正则表达式仍然行不通时 CDATA 块、 注释和脚本和样式元素。好消息是,您可以去除那些使用正则表达式...

我会具有某些工作有关:-) 未普遍理想 weep 比清醒的事情上

是使用 CDATA 内部 HTML 的人吗?

因此,您不能真正解决 regexp 分析问题只,但作为分析程序的一部分这可能起作用。PS︰ 工作产品并不意味着良好的代码。没有 offence,但这是如何工业的编程工作,获取资金

正则表达式开始失败在很短的可能的有效 HTML: <!doctype html><title><</title>简单'<!doctype html><title><</title>'.match(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g)返回["<!doctype html>", "<title>", "<</title>"]段应["<title>", "</title>"].

"徽章 nerator"是什么

请输入您的翻译

RegEx match open tags except XHTML self-contained tags

确认取消