我有一个如下字符串。
$string = "height=175cm weight=70kgs age=25yrs"
字符串内容是键值对,每对由Tab分隔。我希望每个键值对作为单独的变量并打印出每个键值。 我已尝试使用以下代码,但我没有得到正确的结果,请在我出错的地方帮助我。
$string = "height=175cm weight=70kgs age=25yrs";
$pattern = "(([^=]*)\s*=\s*(.*))";
if (preg_match($pattern,$string,$match)) {
echo "<pre>";
print_r($match);
} else {
echo "not matche\n";
}
结果:
Array
(
[0] => height=175cm weight=70kgs age=25yrs
[1] => height
[2] => 175cm weight=70kgs age=25yrs
)
答案 0 :(得分:2)
您可以使用此代码:
$string = "height=175cm weight=70kgs age=25yrs";
if (preg_match_all('/\s*([^=]+)=(\S+)\s*/', $string, $matches)) {
$output = array_combine ( $matches[1], $matches[2] );
print_r($output);
}
Array
(
[height] => 175cm
[weight] => 70kgs
[age] => 25yrs
)
答案 1 :(得分:1)
您可以使用:
$string = "height=175cm weight=70kgs age=25yrs";
$pattern = "/(\w+)=(\d+)(\w+)/i";
if(preg_match_all($pattern,$string,$match))
{
var_dump($match);
}
结果:
array(4) {
[0]=>
array(3) {
[0]=>
string(12) "height=175cm"
[1]=>
string(12) "weight=70kgs"
[2]=>
string(9) "age=25yrs"
}
[1]=>
array(3) {
[0]=>
string(6) "height"
[1]=>
string(6) "weight"
[2]=>
string(3) "age"
}
[2]=>
array(3) {
[0]=>
string(3) "175"
[1]=>
string(2) "70"
[2]=>
string(2) "25"
}
[3]=>
array(3) {
[0]=>
string(2) "cm"
[1]=>
string(3) "kgs"
[2]=>
string(3) "yrs"
}
}
答案 2 :(得分:1)
我已粘贴下面的代码示例,可帮助您解决问题。当然,它的压缩程度不是很高,并且比其他答案的代码行多得多(这些都是很好的答案!)。
我这样做的原因是因为看起来您可能会从一个解释中受益,这个解释会在解决您的问题的过程中一步一步,这样您就可以了解在此过程中发生的事情。
以下是您可以使用的代码:
<?php
$string = "height=175cm\tweight=70kgs\tage=25yrs";
// Divide your string into an array, with each element
// in the array being a string with a key-value pair
$pairs = explode("\t", $string);
// See what the array of pair strings looks like.
// print_r($pairs);
// Create an array to get it ready to hold key-value pairs.
$results = array();
// For each string in your array, split at the equal sign
// and set values in the $results array.
foreach ($pairs as $pair) {
$exploded_pair = explode("=", $pair);
// See what each exploded pair array looks like.
// print_r($exploded_pair);
$key = $exploded_pair[0];
$value = $exploded_pair[1];
$results[$key] = $value;
}
print_r($results);
这不是使用正则表达式,而是使用PHP中的explode
函数。您可以阅读explode
found here上的文档。
您说您的输入字符串由制表符分隔,这就是$string
的赋值语句具有\t
而不是空格的原因。如果您使用空格而不是制表符,请确保更改
$pairs = explode("\t", $string);
到
$pairs = explode(" ", $string);