我查了一些像this question和this question的引用,但无法弄清楚我需要做什么。
我想做的是:
说,我有两个字符串:
$str1 = "link/usa";
$str2 = "link/{country}";
现在我想检查这个模式是否匹配。如果匹配,我希望将国家/地区的值设置为美国。
$country = "usa";
我也希望它适用于以下情况:
$str1 = "link/usa/texas";
$str2 = "link/{country}/{place}";
也许是整数。喜欢匹配每个大括号并为变量提供值。 (并且,如果可能的话,表现更好)
由于我对常规表达非常陌生,所以无法解决问题。提前致谢。
答案 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}}}