2013-07-29 70 views
2

我對正則表達式的理解很少,我恐怕無數的教程對改善我的情況沒有太大的幫助。 我想要的是取一個字符串並用交替字符替換一個特定的分隔符,從而創建一個名稱/值對。 這是用於SEO網址重寫的目的 - 使用IIS重寫。正則表達式 - 用交替字符替換字符

因此,舉例來說,如果我有以下網址:

http://mydomain.com/mypage_foo_bar_megafoo_freebar_nofoo_closedbar.htm 

我需要使用正則表達式來改寫這個來:

http://mydomain.com/mypage.cfm?foo=bar&megafoo=freebar&nofoo=closedbar 

我已經嘗試了一會兒,並已經得到了無處 - 任何人都可以幫我解決問題嗎?

感謝

編輯:我知道這是不是一個好的URL結構的一個很好的例子 - 這是一個遺留系統,我不能提供替代......唉。

回答

3

如果你只替換下劃線,你可以做這個沒有正則表達式。通過使用replaceFirst()方法,無論您使用何種語言。用正則表達式,你只能檢測下劃線並替換它們,與此相同。就像是;

myURL = myURL.replaceFirst("_",".cfm?"); 
while(myURL.contains("_")) 
{ 
    myURL = myURL.replaceFirst("_","="); 
    myURL = myURL.replaceFirst("_","&"); 
} 

如果你需要一個更復雜的一個,以防止在URL的其他部分下劃線的檢測,如果你概括一下可能的組合對於那些我或許可以幫你找到一個合適的模式域從分離更換前的參數。

根據下載頁面,你是在.net中這樣做? http://www.iis.net/downloads/microsoft/url-rewrite


好,我有這個頁面的讀操作; http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module 您將需要一個匹配字符串,如;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm 

而一個替換字符串,如

{R:1}.cfm?{R:2}={R:3} 

然後,您將需要重複此增加的變量對數,直到你認爲合適的例如 匹配字符串;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm 

替換字符串;

{R:1}.cfm?{R:2}={R:3}&{R:2}={R:3} 

系統出現專爲著名的GET請求,而不是任何隨機的網頁並獲取請求的數目。沒有提及如何在該指南中應用重複模式。

+0

不幸的是,這不是一個選項 - 我很樂意在ColdFusion上做幾行操作,但對於URL重寫,我需要在一行代碼中完成Regex中的所有操作。據我所知,我不能做替換,然後在第二次替換時參考結果。 –

+0

我看過文檔並更新了我的答案 – Robadob

+0

我很感謝你在這裏的時間 - 這會工作,但不能解決我的問題。我不知道在任何給定的頁面上會有多少變量,在某些情況下會有很多變量......我讀過任何一個重定向中有9個反向引用的限制。我可以,可行地,鏈重定向...但我認爲在這一點上,我最好的選擇是重寫一箇中介.cfm腳本,它將讀取查詢字符串並相應地重定向。 –