首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的'Greedy令牌解析

PHP中的'Greedy令牌解析
EN

Stack Overflow用户
提问于 2013-10-16 13:37:03
回答 2查看 240关注 0票数 3

什么是PHP中的“贪婪令牌解析”?我在Codeigniter指南中发现了这一点:

“除非需要解析变量,否则始终使用单引号字符串,在需要解析变量的情况下,使用大括号防止贪婪令牌解析。”

“我的字符串{$foo}”

有很好的解释的答案会有帮助。

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-16 13:41:09

贪婪的令牌解析指的是这样的内容:

代码语言:javascript
复制
$fruit = "apple";
$amount = 3;
$string = "I have $amount $fruits";

可能的预期产出:“我有3个苹果”

实际产出:“我有3”

当然,这是一个初学者的错误,但即使专家有时也会犯错误!

就我个人而言,我一点也不喜欢插值变量,大括号和大括号。我发现我的代码更易读,如下所示:

代码语言:javascript
复制
$string = "I have ".$amount." ".$fruit."s";

请注意,代码编辑器有一个更简单的工作颜色编码--这一行,如Notepad++中所示:

再一次,有些人可能更喜欢让引擎做插值:

代码语言:javascript
复制
$string = sprintf("I have %d %ss",$amount,$fruit);

这完全取决于个人的喜好,但在你引用的指导方针中,重点是要小心你正在写的东西。

票数 6
EN

Stack Overflow用户

发布于 2013-10-16 13:45:48

“贪婪”是语法分析中的一个通用术语,指的是“尽可能多地得到”。相反的可能是“不贪婪”或“只得到你所需要的”。

例如,变量插值的不同之处是:

代码语言:javascript
复制
$foo = 'bar';
echo "$foos";

这里的解析器将贪婪地解析所有有意义的内容,并尝试插入变量"$foos",而不是实际存在的变量"$foo“。

正则表达式中的另一个示例:

代码语言:javascript
复制
preg_match('/.+\s/', 'foo bar baz')

这个词贪婪地抓住了"foo bar",因为它是符合.+\s模式的最长字符串。另一方面:

代码语言:javascript
复制
preg_match('/.+?\s/', 'foo bar baz')

这个不贪婪的+?只抓取"foo",这是匹配模式所需的最小值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19404988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档