【问题标题】:Regular expression to get all the value between custom TAG正则表达式获取自定义TAG之间的所有值
【发布时间】:2009-04-29 09:20:38
【问题描述】:

我有 FLASH 对象的自定义标签,我想将其包含在 cms 内容中。现在,当我阅读内容时,我想获取那些自定义标签和它们之间的值。

自定义标签:

<myflash filename="test.swf" width="500" height="400">
  <param name="wmode" value="somevalue"></param>
  <param name="bgcolor" value="#ffffff"></param>
  <var name="id" value="testid"></var>
</myflash>

现在我需要一个正则表达式,它会从内容中读取这些整个代码块。一个内容中会有多个自定义标签。

有人可以帮忙吗?

亲切的问候,

维普尔

【问题讨论】:

  • 正如在大量类似问题上反复声明的那样,正则表达式不是解析 HTML 的合适工具。
  • 这取决于问题、XML 结构、大小、上下文等...如果问题的 XML 很小且性能是关键,则实例化 XML+XPath 框架的成本可能不值得。您通常是对的,但总会有特殊情况。

标签: c# asp.net regex


【解决方案1】:

Regex 是,IMO,处理 XML 的错误工具。为什么不使用XmlDocumentXDocument 等? 如果那是 HTML(注意没有“X”),那么 HTML Agility Pack 可能有用。

通过XmlDocument 和HTML Agility Pack,您可以使用xpath/xquery,因此您可以简单地使用.SelectNodes("//myflash")XDocument 有类似但不同的方法:.Descendants("myFlash")

【讨论】:

  • -1 那不是答案...您提供答案,然后是最终注释。没有答案的笔记是不好的。
  • @majkinetor - .SelectNodes("//myflash") 如何不回答它?例如,发现 .InnerXml 和 .OuterXml 只需 2 秒。我没有包括这个的原因是因为 3 个选项中的每一个的路径都不同,并且该选择取决于 a:xml 与 html(未在问题中指定)和 b:XmlDocument 与 XDocument(取决于.NET 版本,未在问题中指定)。那么继续吧:你会如何明确地回答呢?
  • 这不是因为这个人要求的是 RE,而不是 XPath。与其猜测他使用的方法(你的建议是合理的,那不是问题),不如回答真正的问题,然后提供替代(或语义上更好的)方法。
  • @majkinetor - 对,如果有人要求用锤子把螺丝钉进去,你会给他们锤子吗?或者你会告诉他们螺丝刀的事吗?
  • 我给他们一把锤子,告诉他们螺丝刀的事:P
【解决方案2】:

你可以从一个非常简单的正则表达式开始:

<myflash[^>]*>(.*?)</myflash>

只需确保使用“非贪婪”捕获(.*?),以便".*" 尽可能少地匹配。

另外,使用RegexOptions.SingleLine,以便点匹配每个字符,包括\n

Regex re = new Regex("<myflash[^>]*>(.*?)</myflash>", RegexOptions.SingleLine);

【讨论】:

  • 这个表达式不起作用,可能是因为它里面有 标签..
  • PARAM 标签无关紧要。您是否使用了 SingleLine 标志?如果您的标签并不总是使用小写名称,您可能也想使用 IgnoreCase。如果这不起作用,我们需要查看您的代码,因为正则表达式完全符合您的要求。
  • @majkinetor,Multiline 标志不会改变任何东西。它允许 ^ 和 $ 分别匹配逻辑行的开头和结尾以及整个字符串的开头和结尾。
  • 是的...关键实际上是看点运算符是否消耗新行。我不知道为什么我会用 Multine :)
  • 请注意,&gt; 允许在属性值中使用。
【解决方案3】:

正如 Marc Gravell 所说,正则表达式不适合解析 HTML(或 XML)。请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex? 了解原因。最好使用 HTML 解析器。有关如何在多种语言中使用解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?(至少有两个使用 C# 的示例)。

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多