查询字符串中查找标签与正则表达式
问题描述:
我必须设置一些路由规则在我的PHP应用程序,他们应该在的形式 /%VAR /事/其他/%another_var查询字符串中查找标签与正则表达式
换句话说,我木珠一个正则表达式,它返回由%字符标记的每一个URI片断,由%标记的字符串表示var名称,因此它们几乎可以是每个字符串。
另一个例子: 从/%郎/模块/控制器/动作/%VAR_1 我想正则表达式提取琅和VAR_1
我想是这样
/.*%(.*)[\/$]/
但它不” t工作.....
答
看来,因为它的路由规则,你可能需要一些点的所有片断,你也可以拆分字符串cla ssical方式:
$path_exploded = explode("/", $path);
foreach ($path_exploded as $fragment) if ($fragment[0] == "%")
echo "Found $fragment";
答
$str='/%var/something/else/%another_var';
$s = explode("/",$str);
$whatiwant = preg_grep("/^%/",$s);
print_r($whatiwant);
+0
+1由于'preg_grep',比我更优雅。 – 2010-03-24 11:22:48
答
您可以使用:
$str = '/%lang/module/controller/action/%var_1';
if(preg_match('@/%(.*?)/[^%]*%(.*?)[email protected]',$str,$matches)) {
echo "$matches[1] $matches[2]\n"; // prints lang var_1
}
答
我不认为有必要脚本用正则表达式放缓...修剪()和爆炸()做你需要的一切:
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
)
谢谢你的作品(它很简单,我现在需要睡觉)=) – fatmatto 2010-03-24 11:20:46