以下代码采用$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中)。
答案 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;