在 sscanf() 中,%s 不会在点处停止匹配

发布于 2024-08-19 07:44:42 字数 230 浏览 2 评论 0原文

这不起作用:

list($value) = sscanf('foo.bar','%s.bar');
echo $value; //foo.bar

虽然这有效:

list($value) = sscanf('foo bar','%s bar');
echo $value; //foo

非常感谢任何建议。 谢谢。

This doesn't work:

list($value) = sscanf('foo.bar','%s.bar');
echo $value; //foo.bar

While this does:

list($value) = sscanf('foo bar','%s bar');
echo $value; //foo

Any suggestions are really appreciated.
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小…楫夜泊 2024-08-26 07:44:42

%s 将贪婪地捕获字符,直到出现空格或字符串末尾。 sscanf() 没有“惰性”模式。

您可以使用基本(否定)字符类来捕获所有非点字符并防止过度捕获。

sscanf('foo.bar','%[^.].bar', $value);
echo $value; //foo

%s will greedily capture characters until a whitespace or the end of the string. There is no "lazy" mode for sscanf().

You can use a basic (negated) character class to capture all non-dot character and prevent over-capturing.

sscanf('foo.bar','%[^.].bar', $value);
echo $value; //foo
独留℉清风醉 2024-08-26 07:44:42

您可以使用 Explode 而不是 sscanf() 来完成您想做的事情。

$str = "foo.bar";
list($value1,$value2) = explode(".",$str);
print $value1;

you can use explode instead of sscanf() for what you want to do.

$str = "foo.bar";
list($value1,$value2) = explode(".",$str);
print $value1;
似最初 2024-08-26 07:44:42

我认为这是设计使然。老实说,在这里使用 preg_match 很简单。

I think it by design. It is trivial to use preg_match here, to be honest.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文