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

时间:2011-10-05 08:24:08

标签: php string

我是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

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

4 个答案:

答案 0 :(得分:1)

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

考虑:

<?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的回答,你甚至可以使用那个甚至是排序的

<?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 />';

?>

答案 1 :(得分:0)

要从php中的字符串中提取数据,您可以使用像 preg_match,explode,ereg

您需要更精确地确定所有字符串的确切格式才能使其正常工作,因为您需要使用您正在寻找的特定格式的数据。

答案 2 :(得分:0)

如果字符串的变化与你暗示的一样多,那么几乎不可能准确地完成它。这是任何语言;没有任何关于PHP会使它变得更容易或更难:它是一种自然语言解析问题,而且这些很难实现自动化。

正则表达式(使用preg_split()函数)可以在字符串是常规的情况下完成工作,但不能用于像这样的随机字符串。每一个都是它自己的特殊情况,所以你必须为每一个写一个单独的代码......但在这种情况下,你也可以手动完成分割。

如果数据提供者(即您在评论中链接的网站?)可以提供预先格式化的数据,那么在没有人工干预的情况下获得此类数据的唯一方法是。他们可能已经在自己的产品数据库中将数据拆分为所需的格式,因此如果他们愿意提供,那将对您有用。

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

答案 3 :(得分:0)

我不确定你要找的答案有多具体,但这是一个“解析”你的字符串的正则表达式。它适用于任何紧密遵循相同模式的字符串。

<?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"
}