sscanf忽略空格?

时间:2012-07-02 10:55:41

标签: php string

以下代码采用$input之类的:"a banana is a fruit"

$t = sscanf($input,"a %s is a %s",$child,$parent);
echo $t.",".$child.",".$parent;

并输出:2,banana,fruit,这是完美的!

但是,如果$input = "a cow is an animal"我们得到输出:2,cow,n。这不太理想。

理想情况下,对于$input = "a cow is an animal",它会返回1,cow,,我将使用单独的格式化字符串:"a %s is an %s"来输入2,cow,animal

那么:为什么a中第二个"a %s is a %s"之后的空格不会阻止此问题发生?有没有办法明确声明在a之后必须出现一个空格才能找到正确的匹配?

希望这是有道理的。任何帮助表示赞赏!

编辑:这是实际代码:

$teachArray = array("a %s is a %s","an %s is a %s","a %s is an %s","an %s is an %s");
$i=0;
$t = -1;
while( (t <= 2) && (i < count($teachArray)) ) {
    $t = sscanf($input,$teachArray[i],$child,$parent);
    $i++;
}

所以它一直循环,直到找到匹配的句子结构,或者用完句子模板(存储在$ teachArray中)。

2 个答案:

答案 0 :(得分:4)

您应该使用regular expression

而不是scanf
$input = "a cow is an animal";
preg_match("/^an? (.+?) is an? (.+?)$/", $input, $matches);
echo (count($matches)-1) . ',' . $matches[1] . ',' . $matches[2];

答案 1 :(得分:0)

我认为你仍然可以使用sscanf,即使regexp更灵活。

$t = sscanf($input,"%s %s is %s %s",$a1, $child, $a2, $parent);
echo $t.",".$child.",".$parent;