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

Php 如何匹配模式但获得不同的值,php,regex,.htaccess,Php,Regex,.htaccess,在.htaccess中,我需要匹配一个模式(可能的模式,它可能不存在),但得到一个不同的$1值 示例URL: 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/零件可能存在,也可能不存在 我使用此模式

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

示例URL:

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。但问题是当没有语言部分时,$1url的其余部分变成re

如果我使用这个模式

^([a-z]{2}\/)?other patterns here$
有了这个模式,我可以正确地获得语言,无论它们是否存在,$1,但形式类似于en/fr/。。。这是我不想要的

是否可以像第二个示例中那样匹配,并像第一个示例一样获得值


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

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

^(?:([a-z]{2})/)?(.+)$
使用上面的正则表达式
$1
将具有
en
fr
而不带尾随斜杠
//code>,
$2
将具有剩余的URI