但我需要編寫一個函數,該函數接受一個字符串,在超鏈接中查找URL,然後交換該URL,以便頁面名稱現在用作錨點,例如asp.net c#正則表達式url解析
<a href="mysection/mysector/apage.aspx">
將成爲
<a href="mysection/mysector.aspx#apage">
但這隻會發生在mysector文件夾中的鏈接。
我現在有點難住,任何幫助都會很棒。
但我需要編寫一個函數,該函數接受一個字符串,在超鏈接中查找URL,然後交換該URL,以便頁面名稱現在用作錨點,例如asp.net c#正則表達式url解析
<a href="mysection/mysector/apage.aspx">
將成爲
<a href="mysection/mysector.aspx#apage">
但這隻會發生在mysector文件夾中的鏈接。
我現在有點難住,任何幫助都會很棒。
這將吃掉「文件夾/」的所有序列並捕獲它們中的最後一個。這會附加一個「.aspx」和「#」以及沒有擴展名的文件名。如果您的文件夾和文件名不僅可以包含字母數字字符,還可能需要進一步調整字符類。
href="(([a-z0-9]+/)*)([a-z0-9]+)/([^.]+)\.aspx"
然後用
href="$1$3.aspx#$4"
代替也可以嘗試 「mysection/anothersection/yetanotherone/mysector/apage.aspx」,瞭解它是如何工作的。
沒有特定的順序:
這將幫助你,當你測試你的正則表達式:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
看看在Matches
收集這就是字符串的部分將被保留。
一個例子:http://forums.asp.net/t/1408417.aspx/1
警告:RegEx match open tags except XHTML self-contained tags
好運。
我打算建議使用IIS URLRewrite模塊在後端修復它。那麼你將不需要任何代碼。
如果你真的想這樣做,在C#:
public string FixLinks(string strHTML)
{
try
{
return Regex.Replace(strHTML, "(href=\\\".*/mysector)/(.*)", "$1.aspx#$2");
}
catch (Exception e)
{
return strHTML;
}
}
嘿雷夫,感謝您的解釋,但我想我需要一個更有點幫助,得到它的工作。當我在http://regexpal.com/中嘗試它時,我使用正則表達式與測試字符串_some text /mysector/page.aspx sadsadasdasd_,但它似乎不匹配任何東西。 –
在regexpal.com上,您必須確保您的正則表達式沒有任何尾隨空格(換行符等)。你也可以嘗試使用Tremmors函數的正則表達式。我調整了一下,所以它更具體,如果你逃脫它應該在C#中工作。你也可以在http://gskinner.com/RegExr/上查看我的正則表達式,它更好。它的工作原理(選擇「替換」選項卡)。 – Leif
啊,綠色的複選標記告訴我它工作。 :) 我希望你對解決方案感到滿意。 – Leif