2011-09-27 9 views
1

SQL Server에서 파이프 쉼표로 구분 된 덤프 파일을 가지고 있으며이를 MySQL로 가져 오려고합니다. 줄은 \r\n으로 구분되며 해당 순서는 일부 필드에서도 발생합니다! 그래서 정규식을 사용하여 실제 줄을 찾고 INSERT 진술을 만들고 싶습니다.preg_split을 사용하여 캡쳐 구분 기호를

그러나 일치 문자열에 구분 기호를 포함하는 데 문제가 있습니다. 내가 PREG_SPLIT_DELIM_CAPTURE 트릭을 할 것이라고 생각하지만 분명히 내가 뭔가 잘못하고 있어요. 나의 구분이없는

$ 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 
) 

: 내 구분은 실제로 내가 행에 필요한 ID입니다 세 개의 숫자, 다음 세 가지 공간입니다.

$ 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 

내가 뭘 잘못하고 있고, 내가 원하는 것을 어떻게 얻을 수 있습니까?

답변

6

구분 기호를 괄호로 묶어야합니다. 그렇지 않으면 _DELIM_CAPTURE가 적용되지 않습니다. 여기

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

플래그 정보로서 김에 엉 manual mentions it이 플래그가 설정되면

PREG_SPLIT_DELIM_CAPTURE
는 분리 패턴에 괄호 표현 캡처뿐만 아니라 반환된다.

+0

나는 것을 읽을 수 있었다,하지만 의미 괄호로 이해하지 않았다, 그것 지금은 상당히 분명하지만, : P – user151841

+0

OK, 그것은 나에게 구분 기호가 하나 개의 요소 인 배열을 제공합니다 그리고 그 다음에 샤드가 ... 같은 요소의 일부로 그들을 가져갈 수있는 방법이 있습니까? 주장 같은 것이 있습니까? – user151841

+1

아니요,'preg_split'은 오직 그것들을 분리 해줍니다. 원하는 경우 preg_match_all 패턴을 만들어야합니다. – mario

관련 문제