2009-07-25 4 views
13

$data에는 탭, 선행 공백 및 여러 공백이 포함됩니다. 모든 탭을 공백으로 대체하고 싶습니다. 하나의 공백으로 여러 공백을 넣고 공백을 제거하십시오. 출력 데이터로PHP의 변수 내에서 탭을 공백으로 대체하는 방법은 무엇입니까?

[ asdf asdf  asdf   asdf ] 

:이 입력 데이터를 설정 할

사실 뭔가를해야만

[asdf asdf asdf asdf] 

내가 이걸 어떻게해야합니까?

당신의 최고의 (그리고 뒤에) 공백이 제거됩니다
+0

모든 * 탭을 관계없이 제거하려고합니까, 아니면 컬럼 형식을 유지하기를 원하십니까? – Synetech

+0

답변을 다시 평가하고 다른 답변을 수락해야한다고 생각합니다. – Jeff

답변

14
$data = trim(preg_replace('/\s+/g', '', $data)); 
+0

또한 선행 공백을 없애기 위해 trim을 언급하는 것을 잊었습니다. 아마 ltrim을 언급하기를 원할 것입니다. 왜냐하면 그가 선도 공간을 요구 한 후 양 끝을 설명했기 때문입니다. –

+0

그 점을 지적 해 주셔서 감사합니다. 이 예제에서는 선행 공백과 후행 공백을 모두 제거해야하므로 코드가 업데이트되었습니다. – RaYell

+0

도움이됩니다. limit 매개 변수를 지정하지 않으면 [preg_replace] (http://php.net/manual/en/function.preg-replace.php)는 기본적으로 패턴의 모든 항목을 바꿉니다. – JustinP

1
$data = trim($data); 

.

$pattern = '/\s+/'; 
$data = preg_replace($pattern, ' ', $data); 

이렇게하면 하나 이상의 공백 집합이 하나의 공백으로 바뀝니다.

$data = str_replace("\t", " ", $data); 

그러면 탭이 제거됩니다. 대괄호 가정

+0

'\ s'를 사용하는 경우 '\ t'이 필요하지 않음 – Jeff

3

문자열의 일부가 아닌 당신은 단지 다음, 설명을 위해 그들을 사용하고 :

$new_string = trim(preg_replace('!\s+!', ' ', $old_string)); 

것은 당신이 할 수있을 단일 정규식하지만거야 그 상당히 복잡한 정규 표현식이되어야합니다. 위의 내용은 훨씬 간단합니다.

참고 : "AB \ t \ tCD"(\ t는 탭입니다)를 "AB CD"로 바꾸고 싶지 않다고 가정합니다.

+0

이것은 허용되어야합니다 대답. 'preg_replace'로 트리밍하는 것이 "복잡하다"는 주장을 반박하기 위해 제 대답을 게시했습니다. – Jeff

+0

미용 답변. 고맙습니다. – mghhgm

2
$new_data = preg_replace("/[\t\s]+/", " ", trim($data)); 
+0

'\ s'을 사용한다면'\ t'이 필요하지 않습니다. – Jeff

16

트림, 하나의 공백으로 탭과 여분의 공백을 대체 :

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data)); 
+1

이것이 나에게 많은 도움이되었습니다. 감사합니다. –

+0

첫째, 이것은 어수선한 패턴입니다. 둘째, 작성한대로 다시 스캔하지 않으므로'탭''스페이스'탭''스페이스''탭''스페이스의 실행을 위해 여러 개의 스페이스를 생성합니다. 이걸 시험해 봤어? – Jeff

-1

은 그냥 하나 개의 공간에서 모든 탭과 공백을 대체 할

$str = trim(preg_replace('/\s\s+/', ' ', $str)); 

이 정규식을 사용,

여기에서 +은 한 번 이상 정규식을 의미합니다. patte rn은 두 개 이상의 공백이있는 경우 하나의 공백으로 대체 함을 의미합니다.

+0

- 독방 탭과 일치하지 않는 패턴의 경우 (그리고 게시하기 전에 솔루션을 테스트하지 않는 경우). – Jeff

0

이 대답은 공백과 탭과 관련된 입니다. 물론 도 트리밍/압축을하는 데 다른 종류의 공백을 포함하려고하지만 CR 및/또는 LF을 보존하려고합니다.

먼저 몇 가지 상수를 설정해 보겠습니다. 이렇게하면 수정이 필요하게되면 이해가 쉽고 유지 보수가 용이 해집니다. 유사점과 차이점을 더 쉽게 비교할 수 있도록 몇 가지 여분의 공간을 두었습니다.우리는 대신에 라인 지향 meta-characters이다 전형적인 ^$의 피사체의 시작과 끝을 지정 \A\Zescape characters를 사용하는

define('S', '[ \t]+'  ); # Stuff you want to compress; in this case ONLY spaces/tabs 
define('L', '/\A'.S.'/' ); # stuff on the Left edge will be trimmed 
define('M', '/'.S.'/' ); # stuff in the Middle will be compressed 
define('R', '/'.S.'\Z/'); # stuff on the Right edge will be trimmed 
define('T', ' '   ); # what we want the stuff compressed To 

. 이것은 많은 사람들이 "방어적인"프로그래밍만큼이나 많이 필요하기 때문에 나중에 필요하게하기 위해 S 값을 변경해야합니다. 비밀 소스를위한 지금

: 우리는 배열보다 교체 적은 요소가있는 경우, 즉

을 (강조는 추가) preg_replace의 특별한 의미를 활용할 예정 패턴 배열에서 추가 패턴은 빈 문자열로 바뀝니다.

function trim_press($data){ 
    return preg_replace([ M, L, R ], [ T ], $data); 
} 

그래서 대신 패턴 문자열 대체 문자열 우리 LR 트리밍되는 여분의 패턴 결과 패턴 어레이와 여분의 어레이를 사용하고있다.

0

 도 제거해야하는 경우.

$data = trim(preg_replace('/\s+|nbsp;/g', '', $data)); 
관련 문제