2010-04-08 78 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