簡體   English   中英

正則表達式以匹配.NET中href中的#與錨點

[英]Regex to match anchor with # in href for .NET

我正在嘗試使用正則表達式匹配和替換錨標記。 我到目前為止所擁有的是:

"(<a href=['\"]?([\\w_\\.]*)['\"]?)"

這種方法的問題在於它無法捕獲其值也包含#的href。 我試過了

"(<a href=['\"]?([\\w_\\.#]*)['\"]?)"

"(<a href=['\"]?([\\w_\\.\\#]*)['\"]?)"

沒有成功。

我究竟做錯了什么?

謝謝

我不認為這個問題是與# (正常工作對我來說),但缺少其他網址字符,如- /:等。

這樣的正則表達式如何:

<a href=("[^"]+"|'[^']+'|[^ >]+)

注意:如果可能,請對有效的html使用其他解析DOM方法。

<a href=(('|")[^\2]+?\2|[^>]+)

如果只想替換錨定部分,請使用字符串操作。 它們更簡單,更快

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在第一個井號標簽處進行拆分。

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才能獲得正確的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM