我想从具有大量插入的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]);
}