如何使用php提取数据(字符串)


how to extract data(string) using php?

我是php的新手,我不知道如何在字符串中提取我想要的确切的东西。例如:

Instant Oats Drink - Chocolate Flavour 165g (33g x 5)

我想提取这些数据,以便

Name: Instant Oats Drink - Chocolate Flavour
Weight: 165g
number of pack: 5
unit weight: 33g

请在这个问题上给我一些帮助。

如果你所有的字符串都有相同的形式,你可以使用正则表达式。

考虑:

<?php
    $str = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";
    preg_match('/(?P<title>[a-zA-Z's'-]*)(?P<grammars>[0-9]*g)('s+'()(?P<portion>[0-9]+g)('s+x's+)(?P<times>[0-9]+)('))/', $str, $m);
    echo "Title : " . $m['title'] . '<br />';
    echo "Grammars : " . $m['grammars'] . '<br />';
    echo "Portion : " . $m['portion'] . '<br />';
    echo "Times : " . $m['times'] . '<br />';
?>

基于@Troy的答案,你甚至可以使用那个甚至是sorten的

<?php
    $str = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";
    preg_match('/(?P<title>.*) (?P<grammars>'d+g) '((?P<portion>'d+g) x (?P<times>'d+)')/', $str, $m);
    echo "Title : " . $m['title'] . '<br />';
    echo "Grammars : " . $m['grammars'] . '<br />';
    echo "Portion : " . $m['portion'] . '<br />';
    echo "Times : " . $m['times'] . '<br />';
?>

要在php中从字符串中提取数据,可以使用如下函数Preg_match, explosion, ereg

您将需要更精确地了解所有字符串的确切格式,以便正确工作,因为您需要有您正在寻找的三个函数的特定格式的数据

如果字符串像您暗示的那样变化很大,那么实际上不可能准确地做到这一点。这适用于任何语言;PHP不会使它变得更容易或更难:这是一个自然语言解析问题,而那些真的很难自动化。

Regex(使用preg_split()函数)可以在字符串是规则的情况下完成这项工作,但对于像这样的随机字符串则不行。每一个都是它自己的特殊情况,所以你必须为每一个写一个单独的代码。但在这种情况下,您还不如手动进行拆分。

不需要人工干预就能获得这种数据的唯一方法是数据提供者(即你在评论中链接的站点?)可以提供预格式化的数据。他们可能已经在自己的产品数据库中把数据分成了所需的格式,所以如果他们愿意提供的话,这对你来说很有用。

他们几乎肯定想要向您收取数据费用,但是考虑到您自己手动完成所涉及的工作量,这可能是值得的。

我不确定您正在寻找的答案有多具体,但这里有一个"解析"字符串的正则表达式。它将适用于紧跟相同模式的任何字符串。

<?php
$s = "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)";
preg_match("/(.*) ('d+g) '(('d+g) x ('d+)')/", $s, $matches);
var_dump($matches);
?>

输出:

array(5) {
  [0]=>
  string(53) "Instant Oats Drink - Chocolate Flavour 165g (33g x 5)"
  [1]=>
  string(38) "Instant Oats Drink - Chocolate Flavour"
  [2]=>
  string(4) "165g"
  [3]=>
  string(3) "33g"
  [4]=>
  string(1) "5"
}