我有一个来自SQL Server的管道分隔转储文件,我想将它导入MySQL.这些行由分隔\r\n,并且该序列也出现在某些字段中!所以我想使用正则表达式来查找实际的行并从中做出INSERT声明.
但是,我在匹配字符串中包含分隔符时遇到问题.我以为使用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
)
Run Code Online (Sandbox Code Playgroud)
我的分隔符丢失了.
$ 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
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者我如何得到我想要的东西?
您需要将分隔符分组为括号,否则_DELIM_CAPTURE将无效.
$lines = preg_split( '/ (\d{3}\|)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE);
Run Code Online (Sandbox Code Playgroud)
在这里,手册提到它作为标志描述:
PREG_SPLIT_DELIM_CAPTURE
如果设置了此标志,则将捕获并返回分隔符模式中的带括号的表达式.
| 归档时间: |
|
| 查看次数: |
2653 次 |
| 最近记录: |