【问题标题】:Regular Expression for Extracting Script Tags用于提取脚本标签的正则表达式
【发布时间】:2011-01-13 17:19:05
【问题描述】:

我正在尝试用 C# 编写一个正则表达式来删除所有脚本标签以及其中包含的任何内容。

到目前为止,我想出了以下内容:\<([^:]*?:)?script\>[^(\</<([^:]*?:)?script\>)]*?\</script\>,但这不起作用。

我将把它分解并在每个部分中解释我的想法:

\<([^:]*?:)?script\>

在这里我试图声明它应该获取任何脚本元素,即使它以命名空间为前缀,例如 &lt;a:script&gt;&lt;/a:script&gt;. 我也已将其添加到结束标记中。

[^(\</<([^:]*?:)?script\>)]*?

在这里我试图声明它应该允许标签中包含除&lt;/a:script&gt;&lt;/script&gt; 等之外的任何内容。

\</script\>

我在这里声明它应该有一个结束标签。

谁能发现我哪里出错了?

【问题讨论】:

  • 请提供您的一些数据并指出哪些数据不合格。
  • “谁能发现我哪里出错了?”。是的。使用正则表达式解析 HTML 是你最大的错误。
  • 您考虑过使用 HtmlAgilityPack 吗?例如stackoverflow.com/questions/2785092/…
  • stackoverflow.com/questions/1732348/… 一遍又一遍,一遍又一遍
  • 谢谢大家,我会试试 HTMLAgilityPack。我理解这个问题:标签中的标签会破坏这个东西。

标签: c# regex


【解决方案1】:

这个正则表达式可以很好地解决问题:

\<(?:[^:]+:)?script\>.*?\<\/(?:[^:]+:)?script\>

但请不要这样做

这个简单的 HTML 你会遇到问题:

<script>
var s = "<script></script>";
</script>

你打算如何解决这个问题?对于此类事情,使用HTML Agility Pack 会更聪明。

【讨论】:

  • 为什么我的回答被否决了?他要求一个正则表达式。我提供了一个与他的要求相匹配的脚本标签。他没有要工具,是吗?不,我们的工作是提出更好的替代方案。 那为什么要投反对票? 让你的答案更高还是什么?
  • @Robert 可能是因为“你不能用正则表达式解析 HTML”是 StackOverflow 上的主要模因之一,而你的回答表明用正则表达式解析 HTML 是可以的
  • @Tim Robinson:实际上没有。这就是为什么我快速发布并在几次之后更新了我的答案。有时人们对投票过于仓促。 :) 没关系。也许我投反对票的答案会更容易说服@TheBoss不使用正则表达式解析 HTML。 ;)
  • 很容易(我认为)忽略(回想起来)在其他元素中包含元素的明显问题。正则表达式将无法处理此问题。
  • 看!这就是使用正则表达式解析 HTML 时发生的情况!你被否决了!
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多