PHP字符串解析为cookbook成分

时间:2015-04-16 22:54:05

标签: php regex parsing

我的代码打印出一个如下所示的数组:

foreach ($array as $line) {
    echo $line;
}

结果:

ingredients 1
2x egg
ingredients 2
2x carrot
cabbage
1x potato

问题在于用户输入成分的方式可能因用户而异。有些用户可能会将其键入为

1x potoato

1 - potato

1 potato

甚至只是

potato

当这样的相对开放结束时,正确获取数量和成分类型的有效方法是什么?

2 个答案:

答案 0 :(得分:1)

这是一个解析输入的简单方法,它并不完美,但是没有这样的方法可以按照你想要的方式完全工作。

$ingredients = Array();
foreach($lines as $line) {
    $matches = Array();
    if(!preg_match("/^.*?(\d+).*?(\S+)(\s+)?$/", $line, $matches))
        array_push($ingredients, Array(1, $line));
    else
        array_push($ingredients, Array(intval($matches[1]), $matches[2]));
}

Here it is in action


<强>附录

OP实现了类似的代码

$parsedCards = Array();
foreach($lines as $line) {
    $temp = Array();
    if(!preg_match('/(\d+).*?\s+(.+)\s/', $line, $temp)) {
        array_push($parsedCards, Array(1, ltrim($line)));
    } else {
        array_push($parsedCards, Array(intval($temp[1]), $temp[2]));
    }
}

答案 1 :(得分:-1)

我建议使用正则表达式来搜索可能的数量,然后搜索成分的名称。这可以构建simply或者更复杂,我不会尝试,但使用正则表达式有很多可能性。