我有一個來自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