我想从具有大量插入的sql文件中获取值,如下所示:

INSERT INTO "Messages" VALUES(7662,1,7333,'#foxy.giulia/$marcobonetti7;f966f2547124846f','marcobonetti7','marcobonetti7',NULL,X'6DF3228A75EEF69EB124C51BD0CA6EB7F3C35B33DC8062F479B60AC80442C21A','marcobonetti7',1386795144,61,NULL,0,NULL,NULL,NULL,NULL,'Domani durante il giorno sei a casa?',NULL,NULL,NULL,2,NULL,3,4,1,NULL,NULL,NULL,1198575,3063654961,309438692,NULL,NULL,NULL,NULL);


this pastebin中提供了完整的SQL文件。

我已经做了很远的preg_match_all('/insert into "([a-zA-Z]+)" values\((.*)[\);]{0}/isu'),但是它没有考虑\r\n中的Values(.*),也没有检测到它。

我需要.sql文件中的值和表名。这些值只能是整个字符串。

最佳答案

此正则表达式将表名和整个值列表匹配为字符串:

preg_match_all('/insert into "([a-zA-Z]+)" values\((.*?)\);/isu', $string, $matches, PREG_SET_ORDER);


之后,您可以使用以下方法拆分值:

foreach ($matches as $key => $match) {
    $matches[$key][2] = explode(',', $match[2]);
}

10-07 19:31
查看更多