使用正则表达式正则表达式,如何排除链接中的某些内容

时间:2012-06-15 12:26:53

标签: regex vb.net

继我之前发布的帖子之后,我正在按照我的要求取得进展,但对RegEx表达式的工作原理不太了解,我被卡住了!

这一行:

FilesM = Regex.Matches(StrFile, "<link.*?href=""(.*?)"".*? />")

从我的页面的HTML中提取所有<link..元素以编译合并的style文件。

但是,我需要排除任何media="print"个链接。

我也在尝试组合JS脚本

FilesM1 = Regex.Matches(StrFile, "<script.*?src=""(.*?)"".*?></script>")

是这样,但在这种情况下,我想要排除任何未在本地托管的脚本。我想通过排除href以“http”

开头的任何脚本来执行此操作

那么如何从匹配集合中排除这两个案例呢?

1 个答案:

答案 0 :(得分:1)

我知道这不是你想要的,但是,如果你感兴趣,这里有一个例子,说明如何找到你关心使用XPath的元素:

Dim doc As New XmlDocument()
doc.LoadXml(html)
Dim linkNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::link[(@href) and (not(@media) or (@media != 'print'))]")
Dim scriptNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::script[(@src) and (not(starts-with(@src,'http')))]")

XmlDocument.SelectNodes方法返回与给定XPath匹配的所有元素。

在XPath字符串中,descendant-or-self::表示您希望它从当前位置(根)向下搜索所有后代以查找以下元素名称。如果省略了它,它只会在当前(根)级别查找匹配的元素。

[]条款提供了条件。因此,例如,link[@media != 'print']将匹配没有等于“print”的媒体属性的所有链接元素。 @符号指定属性名称。

在条件中单独列出属性名称意味着您正在检查该属性是否存在。例如,link[@href]匹配所有具有href属性的链接元素。