我试图用正则表达式来匹配和替换锚标签。我到目前为止是这样的:正则表达式将匹配锚与#在href中的#
"(<a href=['\"]?([\\w_\\.]*)['\"]?)"
这种方法的问题是,它无法捕获也有#值的hrefs。我试过
"(<a href=['\"]?([\\w_\\.#]*)['\"]?)"
和
"(<a href=['\"]?([\\w_\\.\\#]*)['\"]?)"
没有成功。
我在做什么错了?
谢谢
我试图用正则表达式来匹配和替换锚标签。我到目前为止是这样的:正则表达式将匹配锚与#在href中的#
"(<a href=['\"]?([\\w_\\.]*)['\"]?)"
这种方法的问题是,它无法捕获也有#值的hrefs。我试过
"(<a href=['\"]?([\\w_\\.#]*)['\"]?)"
和
"(<a href=['\"]?([\\w_\\.\\#]*)['\"]?)"
没有成功。
我在做什么错了?
谢谢
我不认为这个问题是#
(正常工作对我来说),但缺少其他网址字符,如-
,/
,:
等
怎么样的正则表达式像这样:
<a href=("[^"]+"|'[^']+'|[^ >]+)
注:如果可能的话,使用有效的HTML解析其他DOM方法。
谢谢。我想使用一个html解析器,而不是正则表达式,但是这是针对客户端的silverlight应用程序,所以我不能访问这些程序集。我想我会开发一个Web服务,为我远程执行解析,以访问完整的.NET平台(并使用DOM解析器)。 – scripni 2011-03-23 11:43:32
<a href=(('|")[^\2]+?\2|[^>]+)
如果URL包含在''''''中,这将不会很好。或者,如果URL没有用引号括起来(不正确的xhtml,但似乎OP正在尝试匹配这样的链接)。 – Czechnology 2011-03-23 10:34:24
感谢您的警告..我做了必要的更正.. – 2011-03-23 11:00:17
您也应该在否定列表中有一个空格(对于没有引号和更多属性的情况)。这个正则表达式的问题是,如果url包含另一个引号或'>'(非转义),它会过早结束。这就是为什么我使用那个看起来丑陋的列表式正则表达式。 – Czechnology 2011-03-23 11:17:38
如果您只是想替换锚部分使用字符串操作。它们更简单更快
var parts = "http://someurl.com#hashpart".Split("#");
// yields "http://someurl.com" and "hashpart" as array.
// you may want to check if the result has length of two
// if it does :
var newUrl = string.Format("{0}#{1}" parts[0], "some replacement for hashpart");
如果您的URL包含多个散列,请尝试使用string.Substring在第一个hashtag处进行分割。
var url = "http://someurl.com#hash#hashhash";
var hashPos = url.IndexOf("#");
var urlPart = url.Substring(hashPos);
var hashPart = url.Substring(hashPos +1, url.length - hashPos -1);
应该工作,没有验证地写下来,也许你必须折腾一些+/- 1才能找到正确的位置。
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Martijn 2011-03-23 09:39:05