2012-07-26 19 views
3

我只需要在「列表」之後匹配「名稱」,但當然這些單詞可以是任何url目錄或頁面。正面lookbehind內有字符集的RegEx,有可能嗎?

mydomain.com/listing/name

這樣我就可以「REGuest」(要求)是唯一的事情是有一些父目錄。 換句話說,我想匹配「位置」,即任何第二個在域之後。

我試圖像

(?<=mydomain\.com/[^/\?&]+/)[^/\?&]+(?:/)? 

但字符集不積極的回顧後內工作,至少它的設置,以匹配只有一個字符。只要我嘗試匹配其中一個以外(例如,用+,?或*進行修改),它就會停止工作。

我明顯錯過了正面lookbehind語法,它似乎沒有打算爲我想要的。

如何匹配第二級文件名?

謝謝。

回答

2

Regular-expressions.info指出

壞消息是,大多數正則表達式的口味不允許你使用一個回顧后里面只是 任何正則表達式,因爲他們無法向後申請正規 表達。因此,正則表達式引擎需要 要能找出多少步檢查 的回顧後前退一步......

(進一步瞭解,他們甚至提到的Perl,Python和Java)。

我認爲量詞可能是問題所在。我在stackoverflow上找到了this,並簡單地飛過它。

那豈不是可以只匹配整個路徑,並使用一組第二級文件名:

mydomain\.com\/[^\/\?&]+\/([^\/\?&]+)(?:\/)? 

(注:我不得不逃離/我的測試中...)

這樣做的結果會是這樣的:

Array 
(
    [0] => mydomain.com/listing/name 
    [1] => name 
) 

現在,因爲我不知道你的問題的情況下,我只是認爲你將能夠進行後處理的結果,並獲得第1組(一世ndex 1)結果。如果不是,我不知道...