strtok()没用吗?

时间:2014-02-14 13:52:14

标签: php string tokenize strtok

php.net/strtok

直接来自文档的示例:

$tok = strtok($string, " \n\t");

while ($tok !== false) {
    echo "Word=$tok<br />";
    $tok = strtok(" \n\t");
}

在strtok()的第二个参数中,您可以指定用于拆分的字符。 如果指定多个字符,我怎么知道strtok执行拆分的哪一个?

如果我无法找到它,是否会使这个函数对于创建解析器,词法分析器等完全没用?

2 个答案:

答案 0 :(得分:4)

正如我们在文档中看到的那样:

  

请注意,只有第一次调用strtok才会使用字符串参数。   每次对strtok的后续调用都只需要使用令牌,因为它   跟踪当前字符串中的位置。

此函数用于以secuencial为基础对字符串进行标记。

explode返回一个包含所有字符串分割的数组,此函数在每次调用中使用分隔符返回字符串中的第一个标记。在下一个调用中,它返回下一个标记... 但您可以更改分隔符!,这样您就可以迭代字符串,并按照更复杂的逻辑提取部分,也许可以评估先前的标记,或者在运行时获取分隔符等

当然你可以编写一个解析器,也可以使用你知道的许多其他函数来完成它,但这只是一个非常初始的步骤,你必须自己编写所有的逻辑(例如,如果你找到一个{可能你可以标记直到},但是你必须递归地解析返回的字符串,依此类推)

答案 1 :(得分:2)

strtok()无用 - 没有。

创建解析器/词法分析器等是否有用 - 不是真的。

如果你正在解析某些问题,那么除了基于某些分隔符或其他分隔字符串之外,还有很多问题 - 例如处理嵌入的“字符串”或“其他”字符串“'意味着分隔符的含义取决于上下文。