PHP匹配字符串模式和获取变量

时间:2015-07-11 04:58:07

标签: php regex

我查了一些像this questionthis question的引用,但无法弄清楚我需要做什么。

我想做的是:

说,我有两个字符串:

$str1 = "link/usa";
$str2 = "link/{country}";

现在我想检查这个模式是否匹配。如果匹配,我希望将国家/地区的值设置为美国。

$country = "usa";

我也希望它适用于以下情况:

$str1 = "link/usa/texas";
$str2 = "link/{country}/{place}";

也许是整数。喜欢匹配每个大括号并为变量提供值。 (并且,如果可能的话,表现更好)

由于我对常规表达非常陌生,所以无法解决问题。提前致谢。

2 个答案:

答案 0 :(得分:6)

它会按预期为您提供结果

$str1 = "link/usa";
$str2 = "link/{country}";

if(preg_match('~link/([a-z]+)~i', $str1, $matches1) && preg_match('~link/{([a-z]+)}~i', $str2, $matches2)){
    $$matches2[1] = $matches1[1];
    echo $country;
}

注意:上面的代码只会解析字母表,您可以根据需要在范围内扩展字符。

更新:

您也可以使用explode执行此操作,请参阅以下示例:

$val1 = explode('/', $str1);
$val2 = explode('/', $str2);
${rtrim(ltrim($val2[1],'{'), '}')} = $val1[1];
echo $country;

更新2

$str1 = "link/usa/texas/2/";
$str2 = "/link/{country}/{city}/{page}";

if(preg_match_all('~/([a-z0-9]+)~i', $str1, $matches1) && preg_match_all('~{([a-z]+)}~i', $str2, $matches2)){

    foreach($matches2[1] as $key => $matches){
        $$matches = $matches1[1][$key];
    }
    echo $country; 
    echo '<br>';
    echo $city;
    echo '<br>';
    echo $page;
}

答案 1 :(得分:2)

我没有看到使用密钥作为变量名称的意义,当你可以构建一个关联数组时,以后可能会更方便使用,并且避免编写丑陋的动态变量名 $pages = $db->selectCollection("pages"); $cursor = $pages->find(array()); $data = array(); foreach ( $cursor as $page ){ array_push($data,$page); } $intersect = call_user_func_array('array_intersect_assoc',$data); echo "<pre>"; print_r($intersect);

${the_name_of_the_var_${of_my_var_${of_your_var}}}