是否可以在fscanf()的第二个参数处使用正则表达式?

时间:2016-06-12 07:08:22

标签: php arrays regex multidimensional-array scanf

我想读取由空格分隔的'm'个整数,所以我不知道会使用多少个格式修饰符。

根据PHP文档

  

说明

     

mixed fscanf ( resource $handle , string $format [, mixed &$... ] )

     

函数fscanf()类似于sscanf(),但它接受输入   从与句柄相关联的文件中解释输入   到指定的格式,在文档中描述   的sprintf()。

     

格式字符串中的任何空格都匹配中的任何空格   输入流。这意味着即使是格式字符串中的tab \ t也可以   匹配输入流中的单个空格字符。

     

每次调用fscanf()都会从文件中读取一行。

因此可以在fscanf()的第二个参数中使用变量格式修饰符

例如。

fscanf($_fp,"%d\t%d\t%d\n");

由于已知的数组大小,因此它是3%d修饰符。

我知道可以使用fgets($_fp)fscanf($_fp,"%[^\n]"),但fgets($_fp)会返回字符串,fscanf($_fp,"%[^\n]")会返回未编制的结果。在这两种情况下,我都无法做到这一点

arr[i] = fscanf($_fp,"%d\t%d\t%d\n"); //Because I need a integer array

其中arr[i]包含另一个存储返回数组的数组 fscanf($_fp,"%d\t%d\t%d\n")

即..将无法直接使用fscanf()初始化数组。 假设

I / P

2 3 4

2 3 4

4 5 1

但是I / p可以是任何大小,因此可以在fscanf()的第二个参数中使用正则表达式或其他任何东西,以便直接存储在数组中。

1 个答案:

答案 0 :(得分:0)

您不需要理解正则表达式的fscanf()。您可以使用fgets()一次一行地读取文件中的数据,然后使用preg_match()preg_match_all()对其进行解析。

如果您知道该行只包含以空格分隔的数字,那么explode()也会完成这项工作。