我遇到了一个问题,表面上看起来很简单,但我的正则表达式技能却很薄弱。我有一个字符串,我需要将其转换为一个数组,然后相应地处理这些值,这很简单,但是字符串的格式无法更改(它是在其他地方生成的)并且它的逻辑让我感到困惑。
字符串是:
[6] [2] [3] 12.00; [5] [4]
它基本上是一组 id 和十进制值(在本例中为 id 3 == 12.00)。 id 的数量可能随时变化,小数值可以在任何或所有 id 中。
在理想情况下,我会有以下数组:
Array (
[0] => Array (
[id] => 6
[num] =>
)
[1] => Array (
[id] => 2
[num] =>
)
[2] => Array (
[id] => 3
[num] => 12.00
)
Etc...
你们中的任何一个正则表达式向导都知道如何用比我更少的咒骂来实现这一点吗?
到目前为止,我已经能够使用以下方法提取 id:
preg_match_all('@\[(.*?)\]@s', $string, $array);
小数点使用:
preg_match_all('/([0-9]+[,\.]{1}[0-9]{2})/', $string, $array);
但失去了 id 和值之间的相关性。
最佳答案
示例:
<?php
$string = '[6] [2] [3] 12.00; [5] [4]';
preg_match_all('/\[(?P<id>\d+)\](?: (?P<num>[\d\.]+);)?/', $string, $matches, PREG_SET_ORDER);
var_dump($matches);
输出:
array(5) {
[0]=>
array(3) {
[0]=>
string(3) "[6]"
["id"]=>
string(1) "6"
[1]=>
string(1) "6"
}
[1]=>
array(3) {
[0]=>
string(3) "[2]"
["id"]=>
string(1) "2"
[1]=>
string(1) "2"
}
[2]=>
array(5) {
[0]=>
string(10) "[3] 12.00;"
["id"]=>
string(1) "3"
[1]=>
string(1) "3"
["num"]=>
string(5) "12.00"
[2]=>
string(5) "12.00"
}
[3]=>
array(3) {
[0]=>
string(3) "[5]"
["id"]=>
string(1) "5"
[1]=>
string(1) "5"
}
[4]=>
array(3) {
[0]=>
string(3) "[4]"
["id"]=>
string(1) "4"
[1]=>
string(1) "4"
}
}
关于php - 如何使用正则表达式将字符串拆分为二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140294/