2011-06-22 109 views
1

但我需要編寫一個函數,該函數接受一個字符串,在超鏈接中查找URL,然後交換該URL,以便頁面名稱現在用作錨點,例如asp.net c#正則表達式url解析

<a href="mysection/mysector/apage.aspx"> 

將成爲

<a href="mysection/mysector.aspx#apage"> 

但這隻會發生在mysector文件夾中的鏈接。

我現在有點難住,任何幫助都會很棒。

回答

1

這將吃掉「文件夾/」的所有序列並捕獲它們中的最後一個。這會附加一個「.aspx」和「#」以及沒有擴展名的文件名。如果您的文件夾和文件名不僅可以包含字母數字字符,還可能需要進一步調整字符類。

href="(([a-z0-9]+/)*)([a-z0-9]+)/([^.]+)\.aspx" 

然後用

href="$1$3.aspx#$4" 

代替也可以嘗試 「mysection/anothersection/yetanotherone/mysector/apage.aspx」,瞭解它是如何工作的。

+0

嘿雷夫,感謝您的解釋,但我想我需要一個更有點幫助,得到它的工作。當我在http://regexpal.com/中嘗試它時,我使用正則表達式與測試字符串_some text /mysector/page.aspx sadsadasdasd_,但它似乎不匹配任何東西。 –

+0

在regexpal.com上,您必須確保您的正則表達式沒有任何尾隨空格(換行符等)。你也可以嘗試使用Tremmors函數的正則表達式。我調整了一下,所以它更具體,如果你逃脫它應該在C#中工作。你也可以在http://gskinner.com/RegExr/上查看我的正則表達式,它更好。它的工作原理(選擇「替換」選項卡)。 – Leif

+0

啊,綠色的複選標記告訴我它工作。 :) 我希望你對解決方案感到滿意。 – Leif

1

我打算建議使用IIS URLRewrite模塊在後端修復它。那麼你將不需要任何代碼。

如果你真的想這樣做,在C#:

public string FixLinks(string strHTML) 
{ 
    try 
    { 
     return Regex.Replace(strHTML, "(href=\\\".*/mysector)/(.*)", "$1.aspx#$2"); 
    } 
    catch (Exception e) 
    { 
     return strHTML; 
    } 
} 
+0

這隻適用於「mysector」作爲最後一個文件夾。此外,我認爲它實際上是行不通的。你真的嘗試過嗎? – Leif

+0

OP注意到他只想要mysector文件夾中的鏈接。當然,這並沒有考慮到該文件夾​​中的任何子目錄,但他沒有詳細說明。我很快測試了它,它似乎工作。它不適合你嗎? – Tremmors