Нужна помощь с действительно простым регулярным выражением - PullRequest
1 голос
/ 25 июня 2010

Я использую PHP для сопоставления со следующим типом данных:

[["1200","135"],["127","13"]]

Я хочу извлечь все числа в отдельный массив массивов, подобный этому:

array(array(1200,135),array(127,13));

Я использую preg_match для захвата элементов, но пока я даже не могу сопоставить их с правилом. Я буду рад, если кто-то может помочь мне исправить мое правило или даже предложить решение, как этого добиться.

Мое правило регулярного выражения: / ^[ ([" (\d+) "," (\d+) "])*(,)* ]$ /

Я сохранил его, чтобы сделать его более читабельным на этом форуме . Однако это не работает. Пожалуйста, помогите

Ответы [ 4 ]

10 голосов
/ 25 июня 2010

Попробуйте

var_dump( json_decode('[["1200","135"],["127","13"]]') );

:

array(2) {
  [0]=> array(2) {
    [0]=> string(4) "1200"
    [1]=> string(3) "135"
  }
  [1]=> array(2) {
    [0]=> string(3) "127"
    [1]=> string(2) "13"
  }
}

См. Руководство по PHP:

3 голосов
/ 25 июня 2010

Несколько ошибок в вашем регулярном выражении: использование начальных и конечных якорей (^ и $) и не выходя за квадратные скобки.

Но действительно используйте json_decode () , вот что этодля.

1 голос
/ 25 июня 2010

Довольно просто:

  $proper = '[["1200","135"],["127","13"]]';
  $nuked = '[["1200",,"135"],[["127","13"]]';
  $pattern = '/[["[0-9]*","[0-9]*"],["[0-9]*?","[0-9]*"]]/s';
  echo "proper: ". preg_match($pattern, $proper);
  echo "<br>";
  echo "nuked: ". preg_match($pattern, $nuked);

Выходы:

proper: 1
nuked: 0

В значительной степени он должен выглядеть точно так, как вы его указали, за исключением того, что данные между " могут измениться. Я надеюсь, что это то, что вы хотели?

0 голосов
/ 25 июня 2010

Кажется, вы обрабатываете JSON, поэтому используйте декодирование JSON, например:

php > print_r(json_decode('[["1200","135"],["127","13"]]'));
Array
(
    [0] => Array
        (
            [0] => 1200
            [1] => 135
        )

    [1] => Array
        (
            [0] => 127
            [1] => 13
        )

)
...