过滤这些结果?

时间:2012-02-25 04:28:59

标签: php

说我有以下文字:

["4294954874;Centhor 702L (1)","4294954873;Lightning DL904 (1)"]

我想在数组中返回它们,例如:

$array = array('Centhor 702L', 'Lightning DL904');

使用PHP执行此操作的最佳方法是什么?

当我抓住响应时,我需要的信息左侧和右侧的内容是随机生成的。

1 个答案:

答案 0 :(得分:4)

外部结构将使用json_decode()解析为JSON,从而生成一个可以使用正则表达式进一步提取的数组。

$s = '["4294954874;Centhor 702L (1)","4294954873;Lightning DL904 (1)","123876238547;Some Stuff (1500) (2)","4294961598;FXDWG Wide Glide (1584) (20)","4294954805;FXDWG Wide Glide (1690) (3)"]';
$arr = json_decode($s);
$output = array();

foreach ($arr as $part) {
  $matches = array();
  // Regex gets everything following the ;, but not ()
  preg_match('/;([A-za-z0-9.-() ]+)\s+\(\d+\)$/', $part, $matches);
  var_dump($matches[1]);

  // Add to an array...
  $output[] = trim($matches[1]);
}

输出

array(5) {
  [0]=>
  string(12) "Centhor 702L"
  [1]=>
  string(15) "Lightning DL904"
  [2]=>
  string(17) "Some Stuff (1500)"
  [3]=>
  string(23) "FXDWG Wide Glide (1584)"
  [4]=>
  string(23) "FXDWG Wide Glide (1690)"
}

不要忘记修剪空白。

为什么不用正则表达式完成整个事情,你可能会问?好吧,在嵌套引号内工作会很麻烦,也许你需要像.,那样捕获其他字符,这些字符也会有问题,因为它们也会显示为分隔符。