php - 如何使用正则表达式将字符串拆分为二维数组?

标签 php regex arrays string

我遇到了一个问题,表面上看起来很简单,但我的正则表达式技能却很薄弱。我有一个字符串,我需要将其转换为一个数组,然后相应地处理这些值,这很简单,但是字符串的格式无法更改(它是在其他地方生成的)并且它的逻辑让我感到困惑。

字符串是:

[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/

相关文章:

php - 防止通过 PHP 表单将重复项添加到数据库表中

javascript - 当字符串包含 2 个非连续的正斜杠(负向前瞻)时,正则表达式返回 false

java - 正则表达式查找多个分隔符之间的任何内容

sql - PostgreSQL 中按数组重叠分组

arrays - 惯用的 golang : accessing and updating an item in a struct

java - 在 Map Java 中转换嵌套 JsonArray

php - Laravel Eloquent 模型查询 `not null`

php - Symfony2+学说 : How to convert iso8859-1 to utf-8 and viceversa?

php - 无法使用 Carbon formatLocalized 方法返回本地化的 AM/PM 时间格式?

c++ - 使用 C++ 替换或删除正则表达式中不存在的字符