如何匹配模式但获得不同的价值

时间:2013-01-07 12:31:05

标签: php regex .htaccess

在.htaccess中我需要匹配一个模式(可能的模式,它可能不存在),但得到一个不同的值$ 1

网址示例:

http://www.example.com/rest-of-the-url
http://www.example.com/en/rest-of-the-url
http://www.example.com/fr/rest-of-the-url
http://www.example.com/it/rest-of-the-url

en / fr / it / 部分可能存在也可能不存在

我使用此模式以 en fr ...

的形式匹配语言
^([a-z]{2})?other patterns here$

这没关系,我得到语言部分 $ 1 。但问题是当没有语言部分时, $ 1 其余网址

< 重新

如果我使用这种模式

^([a-z]{2}\/)?other patterns here$

使用这种模式我可以正确地获取语言,无论它们是否存在 $ 1 ,但形式如 en / fr / ...我不想要尾随 /

是否可以像第二个示例中那样匹配并获得与第一个示例相同的值?

PS:是的,在php中清除尾随的 / 非常容易,但我问是否可以在htaccess中执行此操作?

1 个答案:

答案 0 :(得分:2)

是的,非常可能在.htaccess中执行此操作。技巧是使用?:使用非捕获正则表达式组。使用以下正则表达式:

^(?:([a-z]{2})/)?(.+)$

使用上面的正则表达式$1enfr没有尾随斜杠/,而$2将包含其余的URI。