我有一个来自SQL Server的管道分隔转储文件,我想将它导入到MySQL中。这些行由\r\n
分隔,并且该序列也发生在某些领域!所以我想使用一个正则表达式来查找实际的行,并且使用一个INSERT
声明。使用preg_split捕获分隔符的问题
但是,我遇到了麻烦,包括匹配字符串中的分隔符。我认为使用PREG_SPLIT_DELIM_CAPTURE
会做的伎俩,但显然我做错了什么。我的分隔符是三个空格后面三个数字,这实际上是我需要该行的ID:
$ cat test.php
<?
$string = ' 897|a|Hello\r\n 583|b|Line\r\nBreak\r\n 332|c|Yet\r\nMore\r\nLine\r\nBreaks\r\n';
$lines = preg_split('/ \d{3}\|/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE);
print_r($lines);
$ php test.php
Array
(
[0] =>
[1] => a|Hello\r\n
[2] => b|Line\r\nBreak\r\n
[3] => c|Yet\r\nMore\r\nLine\r\nBreaks\r\n
)
我的分隔符丢失。
$ php -v
PHP 5.3.3-7+squeeze1 with Suhosin-Patch (cli) (built: Mar 18 2011 17:22:52)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
我在做什么错,或我如何得到我想要的?
我读了这一点,但我不明白是什么意思括号,虽然它现在相当明显:P – user151841
OK,这给了我与分隔符是一个元素的数组而碎片是下一个...有没有办法让它们成为同一个元素的一部分?断言或类似的东西? – user151841
不,'preg_split'只会将它们分开。如果你想将它们组合起来,你将不得不构建一个'preg_match_all'模式。 – mario