Php 使用preg_split捕获分隔符时出现问题
我有一个来自SQL Server的管道分隔转储文件,我想将其导入MySQL。行由Php 使用preg_split捕获分隔符时出现问题,php,preg-split,Php,Preg Split,我有一个来自SQL Server的管道分隔转储文件,我想将其导入MySQL。行由\r\n分隔,该序列也出现在某些字段中!所以我想用一个正则表达式来找到实际的行,并用它们做一个INSERT语句 但是,在匹配字符串中包含分隔符时遇到问题。我原以为使用PREG\u SPLIT\u DELIM\u CAPTURE会奏效,但显然我做错了什么。我的分隔符是三个空格,后跟三个数字,这实际上是我需要的行id: $ cat test.php <? $string = ' 897|a|Hello\r\n
\r\n
分隔,该序列也出现在某些字段中!所以我想用一个正则表达式来找到实际的行,并用它们做一个INSERT
语句
但是,在匹配字符串中包含分隔符时遇到问题。我原以为使用PREG\u SPLIT\u DELIM\u 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
)
我做错了什么,或者如何得到我想要的?您需要将分隔符分组到括号中,否则_DELIM_捕获将无效
$lines = preg_split( '/ (\d{3}\|)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE);
此处,作为标志说明的中途:
预分割捕获如果设置了此标志,分隔符模式中的括号表达式也将被捕获并返回
您需要将分隔符分组到括号中,否则_DELIM_捕获将无效
$lines = preg_split( '/ (\d{3}\|)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE);
此处,作为标志说明的中途:
预分割捕获如果设置了此标志,分隔符模式中的括号表达式也将被捕获并返回
上面的答案将在单独的数组元素中提供分隔符 改为选中此选项:
以上答案将在单独的数组元素中给出分隔符 改为选中此选项:
我读过这篇文章,但我不明白括号中的意思,尽管现在已经很明显了:POK,它给了我一个数组,分隔符是一个元素,碎片是下一个元素。。。有没有办法让它们成为同一元素的一部分?断言或类似的东西?不,
preg_split
只会单独给出它们。如果你想把它们结合起来,你就必须构造一个preg\u match\u all
模式。我读过,但我不明白括号的意思,尽管现在很明显:POK,它给了我一个数组,分隔符是一个元素,分片是下一个元素。。。有没有办法让它们成为同一元素的一部分?断言或类似的东西?不,preg_split
只会单独给出它们。如果您希望将它们组合起来,则必须构建一个preg\u match\u all
模式。