2009-12-09 25 views
1

需要的正則表達式如下網址正則表達式的URL參數字符串轉換成路徑

abc.aspx?str=blue+lagoon&id=1234 

更改爲

/blog/blue-lagoon/ 
+0

用什麼語言?這對我來說似乎是不適合的正則表達式,請給我更多信息。 – 2009-12-09 23:25:35

+0

如果確實是一個URL,那麼'abc.aspx?id = 1234&str = blue + lagoon'是一個合法的等價物,應該被考慮。 – 2009-12-09 23:25:59

+0

此外,正如措辭,它不清楚爲什麼在這裏需要正則表達式 - 聽起來像一個簡單的搜索和替換。 – 2009-12-09 23:27:11

回答

5

在Perl:

my $work_url = $original_url; 
$work_url =~ s/\+/-/g; 
$url = '/blog/' . do { $work_url =~ m/\bstr=([\w\-]+)\b/; $1} . '/'; 

作品給出的例子。

啓發Ragepotato:

$new_url = '/blog/' 
    . sub { local $_ = shift; tr/+/-/; m/\bstr=([\w\-]+)\b/; $1 }->($orig_url) 
    . '/'; 

而一個嚴格的,貪心不足的正則表達式Ragepotatos後,未經測試:

Regex.Match(input.Replace("+", "-"),@"\bstr=(.*?)&").Groups[1].Value 
+0

你可以在C#中使用.net – aloo 2009-12-09 23:34:35

+0

感謝您的回答 – aloo 2009-12-09 23:35:24

+0

不客氣。對不起,我不知道C#.net語法,或者我很樂意發佈。我相信這個正則表達式看起來很相似,但是調用..?我會讀一下,看看我是否可以用編譯器來做它。 – zen 2009-12-09 23:42:47

2

C#.NET

string input = "abc.aspx?str=blue+lagoon&id=1234"; 

string output = "/blogs/" + Regex.Match(input.Replace("+", "-"),@"str=(.*)&").Groups[1].Value + "/"; 
+1

很好地完成。在str上需要一個單詞邊界,而非貪婪的捕獲(。*?)你不覺得嗎? – zen 2009-12-10 00:00:15

+0

確實很好 – Ragepotato 2009-12-10 17:58:29