Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过滤这些结果?_Php - Fatal编程技术网

Php 过滤这些结果?

Php 过滤这些结果?,php,Php,假设我有以下文本: [4294954874;中心702L 14294954873;闪电DL904 1] 我希望以数组形式返回它们,例如: $array = array('Centhor 702L', 'Lightning DL904'); 使用PHP实现这一点的最佳方法是什么 当我抓取响应时,我需要的信息左右两侧的内容是随机生成的。外部结构将解析为JSON和JSON_decode,从而生成一个数组,您可以使用正则表达式进一步提取该数组 $s = '["4294954874;Centhor 70

假设我有以下文本:

[4294954874;中心702L 14294954873;闪电DL904 1]

我希望以数组形式返回它们,例如:

$array = array('Centhor 702L', 'Lightning DL904');
使用PHP实现这一点的最佳方法是什么


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

外部结构将解析为JSON和JSON_decode,从而生成一个数组,您可以使用正则表达式进一步提取该数组

$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]);
}
输出 别忘了删掉空格


你可能会问,为什么不用正则表达式来完成整个过程呢?好吧,在嵌套引号内工作将是一件痛苦的事情,可能您需要捕获其他字符,如.,这也会有问题,因为它们也显示为分隔符。

外部结构将解析为JSON,并使用JSON_decode,从而生成一个数组,您可以使用正则表达式进一步提取该数组

$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]);
}
输出 别忘了删掉空格


你可能会问,为什么不用正则表达式来完成整个过程呢?好的,在嵌套引号内工作将是一件痛苦的事情,可能您需要捕获其他字符,例如,。这也会有问题,因为它们也显示为分隔符。

您可以使用正则表达式。您可以使用正则表达式。非常感谢这一点,除了有hypens之外,它工作得很好,例如:4294958716;DR-Z 250 474294967269;DR-Z125 23-它只是将它们作为DR返回,DR@Latox只需在[]内添加连字符,如[a-za-z0-9-]中所示。一定是在0-9之后,迈克尔,这很有效。非常感谢。您建议如何处理:4294961598;FXDWG宽滑轨1584204294954805;FXDWG Wide Glide 1690 3,-我们希望保留第一组括号中的内容,例如1584和1690,但去掉其他2个。@Latox这使它更复杂一些。请参见我在上面对表达式所做的编辑。我不能保证它在任何情况下都能工作,但它在我的测试中起了作用。@Latox补充道。在[]中,添加了-。非常感谢,除了有hypens外,它工作得很好,例如:4294958716;DR-Z 250 474294967269;DR-Z125 23-它只是将它们作为DR返回,DR@Latox只需在[]内添加连字符,如[a-za-z0-9-]中所示。一定是在0-9之后,迈克尔,这很有效。非常感谢。您建议如何处理:4294961598;FXDWG宽滑轨1584204294954805;FXDWG Wide Glide 1690 3,-我们希望保留第一组括号中的内容,例如1584和1690,但去掉其他2个。@Latox这使它更复杂一些。请参见我在上面对表达式所做的编辑。我不能保证它在任何情况下都能工作,但它在我的测试中起了作用。@Latox补充道。在[]内添加了-以及。