2010-04-08 60 views
0

這些固定鏈接上面被重新路由到我的網頁:正則表達式來檢測正確的永久鏈接?

page.php?permalink=events/foo 
page.php?permalink=events/foo/ 
page.php?permalink=ru/events/foo 
page.php?permalink=ru/events/foo/ 

events是動態的,它可能是specialspackages

我的兩難境地基本上是;我需要檢測,以一個空鏈接,所以我可以在箱子進給一個機器人沒有索引meta標籤:我不能用一個簡單的模式,如[a-zA-Z]+\/?(.+)/,因爲它不會在工作

page.php?permalink=events 
page.php?permalink=events/ 
page.php?permalink=ru/events/ 
page.php?permalink=ru/events 

i18n固定鏈接。

我可以使用哪些正則表達式來檢測這種情況,使用$_GET['permalink']作爲永久鏈接的參考?並避免誤報?

更新:

空鏈接意味着有 「事件/」 部分後無片段。這些都是空的:

page.php?permalink=events 
page.php?permalink=events/ 
page.php?permalink=ru/events/ 
page.php?permalink=ru/events 
+2

定義 「空鏈接」。 – Tomalak 2010-04-08 16:23:24

回答

1

我覺得你接近:

$pattern = '#^(?:[a-z]{2}/)?[a-z]+/(.+)/$#i'; 

說明:

 
#    - regex start 
^   - start-of-string anchor 
    (?:   - non-capturing group (I18N) 
    [a-z]{2} - 2 letter language code 
    /   - a slash 
)?   - end non-capturing group, make optional 
    [a-z]+  - any letter a-z, multiple times (event) 
/   - a slash 
    (.+)   - group 1: any character, multiple times 
/   - a slash 
    $    - end-of-string anchor 
#i    - regex end, make case-insensitive 
+0

感謝您的貢獻。 'events/permalink'會失敗,除非你在最後一個'/'之後添加'?',我認爲'ru/events /'仍然會通過。如果這樣做是不可能的,那麼也許我可以製作一組詞來代替捕獲事件的地方。例如(?:events | packages | specials),所以它更容易一些? – 2010-04-08 16:45:18

+0

#[^ /] {3,}/[^ /] + /?$#'# – 2010-04-08 16:52:41

+0

@Fedor這樣簡單的事情:您確實*仍*不完全定義您的要求。請向你的問題添加一個確定的例子列表,顯示哪些字符串應該匹配,哪些不應該匹配。 – Tomalak 2010-04-09 09:12:04