2016-06-10 88 views
3

我能够使用fgets()读取一行中的整个字符串,但fscanf()不这样做。PHP fscanf vs fgets

根据PHP手册

的fscanf - 从文件根据格式

功能fscanf()类似于sscanf()解析输入,但它从与手柄和解释相关联的文件其输入根据指定的格式输入,这在sprintf()的文档中有描述。

fgets - 从文件指针获取行

从文件指针获取一行。

由于fscanf()支持如上面提到我可以使用%s来读取整个行格式,而是它仅读出一个字。

回答

3

fscanf()sscanf()的PHP文档不完整。格式与printf()使用的格式类似,但它们不完全相同。当您打印时,%s将打印任何字符串,但是当您扫描它时,只会读取一个字。要获得更完整的信息,您需要阅读Cfscanf()函数的文档。其中一些信息也位于文档网页的注释部分。

要使用fscanf()读取整行,请使用"%[^\\n]"。在fscanf(),$[^characters]表示匹配不在括号内的集合中的任何字符序列(它与正则表达式中的[^characters]*类似)。因此,它匹配除换行符以外的任何字符序列。请参阅http://php.net/manual/en/function.sscanf.php#56076

+0

谢谢你这样做,但我试过**%[^ \] **,它仍然有效,所以** \ n **的需求是什么。 – phpNoob

+0

括号应该包含至少一个要排除的字符。也许它在PHP中起作用,因为即使你没有明确说出,它也会自动停止在行尾。 – Barmar

+0

根据PHP手册每次调用fscanf()都会从文件中读取一行。 – phpNoob