2010-10-13 68 views
0

我正在用幾種語言構建一個應用程序。如何在正則表達式中做到這一點?

test.com/ -english index 
test.com/ca - canadian english index 
test.com/canada-promo - english version of canada promo page 
test.com/ca/canada-promo - canadian english version of promo page 

我該如何過濾?

對不起。實際上有4種語言(/ fr /和/ es /)。我希望能夠從傳遞的URL中確定語言。

+6

不要打擾,我們看英文就好了。 – 2010-10-13 18:37:28

+0

改爲使用'split'。 – BrunoLM 2010-10-13 18:38:53

+0

我不明白你的問題是什麼。你想用正則表達式匹配什麼? – 2010-10-13 18:39:14

回答

2

test.com/(?:([a-z]{2})(?=$|/))?(?:/)?(.*)

說明:

test.com/ #match beginning boilerplate, replace with "^" if need be 
(?:([a-z]{2})(?=$|/))? #match two characters if followed by the end of line or slash 
(?:/)? #consume the slash if there was one 
(.*) #the page 

編輯:好吧,我想這樣的作品了。儘管如此,可能會有更優雅的解決方案。第一組是語言代碼,第二組是頁面。它適用於您提供的四個輸入。

1
preg_match('^/((ca|fr|es)(/|$))?(.*)$', $url, $matches); 
$lang = $matches[2]; 
if (!$lang) { 
    $lang = 'en'; 
} 
$url = $matches[4]; 
+0

哎呦,看起來像你修好你的修爲我;像我的你最初失敗的時候,語言沒有跟着斜線。我更喜歡你的;更容易不使用積極的lookahead,只是匹配+消耗斜線。 – 2010-10-13 19:03:57

相關問題