1

以下代码采用$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

那么:为什么第二个ain之后的空间不能"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 中)。

4

2 回答 2

4

而不是 scanf,您应该使用正则表达式

$input = "a cow is an animal";
preg_match("/^an? (.+?) is an? (.+?)$/", $input, $matches);
echo (count($matches)-1) . ',' . $matches[1] . ',' . $matches[2];
于 2012-07-02T12:39:47.087 回答
0

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

$t = sscanf($input,"%s %s is %s %s",$a1, $child, $a2, $parent);
echo $t.",".$child.",".$parent;
于 2013-12-12T07:37:30.650 回答