1

SQL Server からのパイプ区切りのダンプ ファイルがあり、それを MySQL にインポートしたいと考えています。行は で区切られて\r\nおり、そのシーケンスも一部のフィールドで発生します! INSERTしたがって、正規表現を使用して実際の行を見つけ、それらからステートメントを作成したいと思います。

ただし、一致文字列に区切り記号を含めるのに問題があります。を使用PREG_SPLIT_DELIM_CAPTUREするとうまくいくと思いましたが、どうやら何か間違っているようです。私の区切り文字は、3 つのスペースの後に 3 つの数字が続きます。これは、実際には行に必要な 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

私は何を間違っていますか、またはどうすれば欲しいものを手に入れることができますか?

4

2 に答える 2

6

区切り文字を括弧でグループ化する必要があります。そうしないと、_DELIM_CAPTURE は効果がありません。

$lines = preg_split( '/   (\d{3}\|)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE);

ここでは、マニュアルはそれをフラグの説明としてパッサンと述べています:

PREG_SPLIT_DELIM_CAPTURE
このフラグが設定されている場合、区切り文字パターンの括弧で囲まれた式もキャプチャされて返されます。

于 2011-09-27T16:45:20.963 に答える
1

上記の回答では、別の配列要素に区切り文字が表示されます。

代わりにこれを確認してください: preg_split 結果に分割区切り文字を含める方法は?

于 2014-03-31T03:54:47.043 に答える