我正在尝试使用正则表达式匹配和替换锚标签。到目前为止我所拥有的是:
"(<a href=['\"]?([\\w_\\.]*)['\"]?)"
这种方法的问题在于它无法捕获在其值中也具有#的href。我试过了
"(<a href=['\"]?([\\w_\\.#]*)['\"]?)"
和
"(<a href=['\"]?([\\w_\\.\\#]*)['\"]?)"
没有成功。
我做错了什么?
谢谢
答案 0 :(得分:3)
我认为问题不在于#
(对我来说很好)但缺少其他网址字符,例如-
,/
,:
等
这样的正则表达式怎么样:
<a href=("[^"]+"|'[^']+'|[^ >]+)
注意:如果可能,请使用其他解析DOM方法来获得有效的html。
答案 1 :(得分:1)
<a href=(('|")[^\2]+?\2|[^>]+)
答案 2 :(得分:1)
如果您只想替换锚点部分使用字符串操作。它们更简单,更快捷
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");
如果您的网址包含多个哈希值,请尝试使用string.Substring在第一个哈希标记处进行拆分。
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以获得合适的位置。