使用具有开始和结束匹配模式的正则表达式读取文件

时间:2016-03-16 14:29:24

标签: php regex preg-match

我正在阅读.sql文件,我的要求是读取文件并从INSERT文件中获取.sql查询,当我使用正则表达式时,它只返回查询的一半不是列值可能是因为新行。

返回值:

Array ([0] => INSERT INTO `projects` (`id`, `project`) VALUES )

我的代码:

$sql_file_path = '/var/www/html/table.sql';
$fh = fopen($sql_file_path, 'r') or die($php_errormsg);
$pattern = "/INSERT INTO/"; 
while (!feof($fh)) 
{
   $line = fgets($fh, 4096);
   if (preg_match($pattern, $line))
    {
      $ora_books[] = $line; 
    }
}
fclose($fh);
echo '<pre>';
print_r($ora_books);

请帮我创建正则表达式,该表达式也会读取包含列值的所有插入查询。

感谢。

1 个答案:

答案 0 :(得分:0)

是的,fgets会给你一行,所以如果查询跨越行,这将无效。只需匹配整个文件,使用echo ''.$start.' hello '.End.''; 作为模式,将第三个参数(数组)提供给preg_match,然后您将获得该数组中的所有查询。

我必须看到文件生成确切的模式 - 如果你在insert语句中有分号,找到一些标记insert语句结束的东西,例如/INSERT INTO[^;]+/