Php regexp在URL中查找区域设置
我正在做正则表达式来解析url,并在我的网站上查找区域设置。我所做的是这个代码:Php regexp在URL中查找区域设置,php,regex,Php,Regex,我正在做正则表达式来解析url,并在我的网站上查找区域设置。我所做的是这个代码: <?php $app_conf = require_once __DIR__ . '/../config/app.php'; function extract_lang($avail) { $uri_lang = []; if (preg_match('/^(\/)+([a-z]{2})(\/+.*)?/', $_SERVER['REQUEST_URI'], $uri_lang)) {
<?php
$app_conf = require_once __DIR__ . '/../config/app.php';
function extract_lang($avail)
{
$uri_lang = [];
if (preg_match('/^(\/)+([a-z]{2})(\/+.*)?/', $_SERVER['REQUEST_URI'], $uri_lang)) {
if (in_array($uri_lang[2], $avail)) {
$_SERVER['REQUEST_URI'] = isset($uri_lang[3]) ? $uri_lang[3] : "/";
$_SERVER['HTTP_LANG'] = $uri_lang[2];
}
}
}
if ($app_conf['extract_from_uri']) {
extract_lang($app_conf['locales']);
}
我需要以某种方式更新我的正则表达式,我正在努力解决它,请帮助我。
在locales配置中,我有一个数组
'locales' => ['en', 'ru']
好的,路线应该是这样的
https://m2.test/en/environmental_projects
您可以匹配一个正斜杠,在第一组中捕获2个字符a-z,然后使第2组可选地匹配一个正斜杠和任何字符,除了以锚点结尾的换行符
$
N注意现在有2个捕获组而不是3个,如果您将更改为除/
以外的字符,例如~
,则不必转义正斜杠
^/([a-z]{2})(/.*)?$
见
比如说
if (preg_match('~^/([a-z]{2})(/.*)?$~', $_SERVER['REQUEST_URI'], $uri_lang)) {
带有
en
或ru
的url看起来像什么?该模式当前匹配正斜杠的1倍或更多倍,然后是字符a-z的2倍,然后是可选部分,而不是匹配正斜杠的1+倍和任意字符。由于最后一部分是可选的,没有什么可以阻止2个字符的a-z匹配。@第四只鸟更新了我的问题,并举例说明了路由应该是什么样子。比如^/([a-z]{2})(/.*)?$
如果(preg_match('~^/([a-z]{2})(/.*),$服务器['REQUEST_URI'],$URI lang){
@Thefourthbird好吧,看起来正是我需要的,谢谢!
if (preg_match('~^/([a-z]{2})(/.*)?$~', $_SERVER['REQUEST_URI'], $uri_lang)) {