我有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>
现在我需要一个正则表达式,它将从内容中读取整个代码块。一个内容中将有多个自定义标记。
任何人都可以帮忙吗?
亲切的问候,
VIPUL
答案 0 :(得分:5)
正则表达式是IMO,它是处理XML的错误工具。为什么不使用XmlDocument
或XDocument
等?
如果是HTML(注意没有“X”),那么HTML Agility Pack可能会有用。
使用XmlDocument
和HTML Agility Pack,您可以使用xpath / xquery,因此您只需使用.SelectNodes("//myflash")
即可。 XDocument
有类似但不同的方法:.Descendants("myFlash")
。
答案 1 :(得分:3)
你可以从一个非常简单的正则表达式开始:
<myflash[^>]*>(.*?)</myflash>
请确保使用“非贪婪”捕获(.*?)
,以便".*"
尽可能少地匹配。
另外,使用RegexOptions.SingleLine
,以便点匹配每个字符,包括\n
:
Regex re = new Regex("<myflash[^>]*>(.*?)</myflash>", RegexOptions.SingleLine);
答案 2 :(得分:0)
正如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#的示例)。