2011-08-31 48 views
1

的最後一個索引例如:正則表達式:匹配的文本最多字符

http://foobar.com/foo/bar/foobar.php

從這個地址,我需要提取以下內容:

http://foobar.com/foo/bar

我曾嘗試用以下的正則表達式:

(?<namespace>.*)/.*? 

,但返回的值是

HTTP:

誰能幫助?謝謝。

+0

您是否使用特定的開發環境或框架?許多語言都有專門用於解析URL並返回其組件的函數。這可能是一個更好的方法,然後正則表達式,如果它是一個選項。 –

+0

基於命名組語法加上.php擴展名,我會說他們正在使用PHP(和PCRE 7+正則表達式),所以使用[strrpos]可能更好(http://www.php.net/manual /en/function.strrpos.php)和[substr](http://www.php.net/manual/en/function.substr.php)(或者可能是另一個函數,如果PHP有一個「刪除最後一個元素」類型事情)。 –

+0

@Jacob雖然Bart的解決方案正在發揮作用,但您的評論是最有幫助的答案。我正在使用.NET進行開發,但我不確定爲什麼當有許多已經寫好的組件可以幫助我時,我決定使用正則表達式。謝謝! –

回答

3

試試這個:

^(?<namespace>.*)/[^/]+$ 

一個快速的解釋:

^     # the start of input 
(?<namespace>.*)/ # zero or more chars followed by a '/' (which the last '/') 
[^/]+    # one or more chars other than '/' 
$     # the end of input 
0

嘗試用這個表達式:

^(?<namespace>.*)/.*$ 
2

我覺得正則表達式是矯枉過正這裏。你使用什麼編程語言?這將是如何在JavaScript中完成的。

var url = 'http://foobar.com/foo/bar/foobar.php' 
url.split('/').slice(0,-1).join('/') 

你甚至可以使用SUBSTR一些性能!

var url = 'http://foobar.com/foo/bar/foobar.php' 
url.substr(0, url.lastIndexOf('/')) 

我提供的陣列方式的唯一原因是因爲我不知道在lastIndexOf跨瀏覽器兼容的。

+0

這可能是PHP,所以像'substr($ url,0,strrpos($ url,'/'))'等於你的第二個。 –