查询字符串中查找标签与正则表达式

问题描述:

我必须设置一些路由规则在我的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"; 
+0

谢谢你的作品(它很简单,我现在需要睡觉)=) – fatmatto 2010-03-24 11:20:46

$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 
)