Php 如何从字符串中提取数字并添加到数组中?

Php 如何从字符串中提取数字并添加到数组中?,php,regex,split,preg-match-all,regex-lookarounds,Php,Regex,Split,Preg Match All,Regex Lookarounds,我要转换此字符串: <5> 20825.24 </ 5> <7> 0.0 </ 7> <8> 0.0 </ 8> 只要输出在XML标记名的开头有数字,它就不是有效的XML。你可能不得不使用正则表达式来完成这项工作 这使用了(.*)在这里,我们还可以使用正则表达式收集所需的数字,然后将其推送到一个新数组: (?:<)(\d?)(?:>)(?:.+?)([0-9.]+)? 正则表达式电路 可视化正则表达式: 如果

我要转换此字符串:

<5> 20825.24 </ 5> <7> 0.0 </ 7> <8> 0.0 </ 8>

只要输出在XML标记名的开头有数字,它就不是有效的XML。你可能不得不使用正则表达式来完成这项工作


这使用了
(.*)在这里,我们还可以使用正则表达式收集所需的数字,然后将其推送到一个新数组:

(?:<)(\d?)(?:>)(?:.+?)([0-9.]+)?
正则表达式电路 可视化正则表达式:


如果要将开始标记中的数字与结束标记中的数字相匹配,可以使用正则表达式,并将a用于第一个捕获组:

<(\d+)>\h*\d+(?:\.\d+)?\h*</\h*\1>
结果

Array
(
    [5] => 20825.24
    [7] => 0.0
    [8] => 0.0
)

请注意,现在数组键是5、7和8。请记住,如果您可能使用不同的数据,那么数组不能有重复的键。

XML标记名不能以数字开头,因此这意味着除非您处理数据,否则它不是有效的XML(也没有根节点,但很容易修复),它比我的ans更简洁、更干净。
array(3) {
  [5]=>
  string(8) "20825.24"
  [7]=>
  string(3) "0.0"
  [8]=>
  string(3) "0.0"
}
$data = "<5>20825.24</5><7>0.0</ 7><8>0.0</8>";

preg_match_all("~<(\d*)>(.*?)</~", $data, $matches);
$output = array_combine($matches[1], $matches[2]);
print_r($output);
Array
(
    [5] => 20825.24
    [7] => 0.0
    [8] => 0.0
)
(?:<)(\d?)(?:>)(?:.+?)([0-9.]+)?
$re = '/(?:<)(\d?)(?:>)(?:.+?)([0-9.]+)?/m';
$str = '<5> 20825.24 </ 5> <7> 0.0 </ 7> <8> 0.0 </ 8>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$arr = array();
foreach ($matches as $key => $value) {
    $arr[$value[1]] = $value[2];
}

var_dump($arr);
array(3) {
  [5]=>
  string(8) "20825.24"
  [7]=>
  string(3) "0.0"
  [8]=>
  string(3) "0.0"
}
<(\d+)>\h*\d+(?:\.\d+)?\h*</\h*\1>
$re = '~<(\d+)>\h*(\d+(?:\.\d+)?)\h*</\h*\1>~m';
$str = '<5> 20825.24 </ 5> <7> 0.0 </ 7> <8> 0.0 </ 8>';
preg_match_all($re, $str, $matches);
print_r(array_combine($matches[1], $matches[2]));
Array
(
    [5] => 20825.24
    [7] => 0.0
    [8] => 0.0
)