2013-10-19 3 views
1

첫 번째와 두 번째 열과 두 번째와 세 번째 열 사이의 공백을 \t으로 바꾸어야합니다.regex는 공백을 탭 문자로 바꿉니다.

0101 A 01/13/13 
0102 F 04/05/13 
0209 C 04/19/13 

하지만 난 문제가이 일을 데, 그것은 한 줄에 모두 넣고 대신 \t을 쓰고있다.

\t0101\tA\t01/13/13\t\t .... 

어떻게 내가 제대로 올바른 형식이를 얻을 수 있습니다 .... 그래서 그것을

preg_replace('/(?:^|\s)/', '\t', $text); 

그것을 인쇄?

도움을 주시면 감사하겠습니다.

+1

'str_replace ('', "\ t", $ string)'가 작동하지 않습니까? –

+0

모든 사람들이 정규식 질문을하는 것을 지켜 보는 것은 재미 있습니다 ... : ^) 여러 가지 방법으로 문제를 해결할 수 있습니다. – beroe

답변

3

데이터는 다음과 같이 엄격한 형식, 왜 안

에있는 경우
preg_replace('/\s+(.)\s+/', "\t$1\t", $text); 
+0

문법 조정에 감사드립니다. - PHP는 제 첫 번째 언어가 아닙니다. :) – Josh

+0

여분의 공백이있을 가능성이있는 경우 (예 : 다른 숫자의 앞자리), 나는 편집하기 전에 원래의 \ w 대신'더 안전하다 '고 생각합니다. – beroe

+0

예 ... 실제로 코멘트를 게시 할 때까지'.'을 확인하십시오. 나는'\ w'을 사용하여 그것을 남겨 두었을 것이다. 그러나 형식이 정말로 일관성이 있다면, 어느 것이 든 상관 없다. – Josh

3

리터럴 공간을 검색하고 \t으로 바꿉니다 ... 데이터가 다를 경우가 아니면 (?:)이 필요하지 않습니다.

다른 공백이 있습니까? 더 많은 열이 있습니까? 내가 가진 test.php 파일을 만들 경우

preg_replace('/ /',"\t", $text); 

는 :

<pre> 
<?php 
$t="0101 A 01/13/13\n0102 F 04/05/13\n0209 C 04/19/13"; 
printf(preg_replace('/ /',"\t",$t)); 
?> </pre> 

그것은이 생성

0101 A 01/13/13 
0102 F 04/05/13 
0209 C 04/19/13 
+0

+1 가장 간단한 방법입니다. – hwnd

+1

이것은 기본적으로'str_replace ('', "\ t", $ text);' –

+0

@Jack 네, 제 시스템에서 테스트 한 결과 작동했습니다. – hwnd

관련 문제