我必须在我的php应用程序中设置一些路由规则,它们应该在表单中 /%VAR /东西/ ELSE /%another_var
换句话说,我得到一个正则表达式,它返回每个由%字符标记的URI片段,标记为%的字符串表示var名称,因此它们几乎可以是每个字符串。
另一个例子: 来自/%lang / module / controller / action /%var_1 我希望正则表达式提取lang和var_1
我试过像
这样的东西/.*%(.*)[\/$]/
但它不起作用.....
答案 0 :(得分:1)
$str='/%var/something/else/%another_var';
$s = explode("/",$str);
$whatiwant = preg_grep("/^%/",$s);
print_r($whatiwant);
答案 1 :(得分:1)
看到它的路由规则,你可能需要在某些时候所有的部分,你也可以用经典的方式分割字符串:
$path_exploded = explode("/", $path);
foreach ($path_exploded as $fragment) if ($fragment[0] == "%")
echo "Found $fragment";
答案 2 :(得分:1)
我认为不需要使用正则表达式减慢脚本速度... trim()和explode()可以执行您需要的所有操作:
function extract_url_vars($url)
{
if ( FALSE === strpos($url, '%') )
{
return $url;
}
$found = array();
$parts = explode('/%', trim($url, '/') );
foreach ( $parts as $part )
{
$tmp = explode('/', $part);
$found[] = ltrim( array_shift($tmp), '%');
}
return $found;
}
// Test
print_r( extract_url_vars('/%lang/module/controller/action/%var_1') );
// Result:
Array
(
[0] => lang
[1] => var_1
)
答案 3 :(得分:0)
您可以使用:
$str = '/%lang/module/controller/action/%var_1';
if(preg_match('@/%(.*?)/[^%]*%(.*?)$@',$str,$matches)) {
echo "$matches[1] $matches[2]\n"; // prints lang var_1
}