我試圖用正則表達式來匹配和替換錨標籤。我到目前爲止是這樣的:正則表達式將匹配錨與#在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