[英]PHP Match String Pattern and Get Variable
我查了一些像這個問題和這個問題的引用,但無法弄清楚我需要做什么。
我想要做的是:
說,我有兩個字符串:
$str1 = "link/usa";
$str2 = "link/{country}";
現在我想檢查這個模式是否匹配。 如果匹配,我希望將國家/地區的值設置為美國。
$country = "usa";
我也希望它適用於以下情況:
$str1 = "link/usa/texas";
$str2 = "link/{country}/{place}";
也許是整數。 喜歡匹配每個大括號並為變量提供值。 (並且,如果可能的話,是更好的表現)
因為我對常規表達非常新,所以我無法解決問題。 提前致謝。
它會按預期給你結果
$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;
}
當你可以構建一個可能在以后使用時更方便的關聯數組並且避免編寫丑陋的動態變量名時,我沒有看到使用鍵作為變量名的意義${the_name_of_the_var_${of_my_var_${of_your_var}}}
:
$str1 = "link/usa/texas";
$str2 = "link/{country}/{place}";
function combine($pattern, $values) {
$keys = array_map(function ($i) { return trim($i, '{}'); },
explode('/', $pattern));
$values = explode('/', $values);
if (array_shift($keys) == array_shift($values) && count($keys) &&
count($keys) == count($values))
return array_combine($keys, $values);
else throw new Exception ("invalid format");
}
print_r(combine($str2, $str1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.