Php 如何匹配模式但获得不同的值
在.htaccess中,我需要匹配一个模式(可能的模式,它可能不存在),但得到一个不同的$1值 示例URL: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/零件可能存在,也可能不存在 我使用此模式
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从url的其余部分变成re
如果我使用这个模式
^([a-z]{2}\/)?other patterns here$
有了这个模式,我可以正确地获得语言,无论它们是否存在,$1,但形式类似于en/fr/。。。这是我不想要的
是否可以像第二个示例中那样匹配,并像第一个示例一样获得值
PS:是的,在php中清理拖尾非常容易,但我想问的是,是否可以在htaccess中执行此操作?是的,在.htaccess中执行此操作非常有可能。诀窍是使用
?:
使用非捕获正则表达式组。使用以下正则表达式,例如:
^(?:([a-z]{2})/)?(.+)$
使用上面的正则表达式$1
将具有en
或fr
而不带尾随斜杠//code>,$2
将具有剩余的URI