我是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
请就这个问题给我一些帮助。
答案 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"
}