2012-05-03 5 views
1

이 예제에서 preg_split에서 사용할 정규식이란 무엇입니까?preg_split 후행 공백을 포함하는 단어로

<?$a='Word with white trailing spaces. '; 

출력

Array(
[0] => 'Word ', 
[1] => 'with ', 
[2] => 'white ', 
[3] => 'trailing ', 
[3] => 'spaces. ' 
) 

내가 PHP에서 정규식에 아무 생각도 없어. 코드를 최소화해야합니다.

array_map('join', 
    array_chunk(
    preg_split('/(\s+)/', $a, null, 
       PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY), 
    2)); 

이 단계에서 그것을 촬영 : 어쩌면 누군가가 나를 도울하고 대답 정규식

+0

실제로 시도한 것을 가지고 문제가 생기면 사람들을 돕기 위해 필요시 코드를 작성하지 않습니다. – jprofitt

+0

@jprofitt 너무 작지만 쉬운 일을하기를 원합니다. – philwinkle

+0

(\ w +)은 공백을 제외한 모든 단어와 일치해야합니다. 또는 공간을 그대로 유지해야합니까? – Philip

답변

0

음에 대해 조금 설명 할 수있다, 여기에 하나 개의 옵션입니다. 공백의 양만큼

  1. 분할 - \s+

  2. 하지만 공백을 기억하고는 - 그 괄호와 PREG_SPLIT_DELIM_CAPTURE 플래그입니다.

    이렇게하면 다음과 같습니다 배열을 제공합니다

    array('Word', ' ', 'with', ' ', 'white', ' ', 
         'trailing', ' ', 'spaces.', ' ') 
    
  3. 이제 우리는 두 요소 배열의 배열이 2

    의 수 chunk_size와 array_chunk에 결과를 전달합니다

    array(array('Word', ' '), array('with', ' '), ...) 
    
  4. array_map에 콜백 join을 전달합니다. 각 문자열 쌍을 결합합니다. int O를 하나의 문자열, 우리에게 원하는 결과를 제공합니다

    array('Word ', 'with ', ...); 
    
1

편집 : 나는 영업 이익은 설명을 원을 참조하십시오. 기본적으로() 새 단어를 찾는 지점까지 단어 (들) \ w +와 비 단어 \ W +를 그룹화합니다(). 그래서 (여기에있는 모든 것) = $ 1

$str = "Word with white trailing spaces. "; 


$split = preg_split("/(\w+\W+)/", $str, null, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); 

var_dump($split); 
+0

... 또는 그렇게 할 수 있습니다. 그러나 그것은 너무 단순합니다. :) –

+0

@ MarkReed :) 왜 빈 키/파리 던져 어떤 생각? 그러므로 PREG_SPLIT_NO_EMPTY, 예제에서 가져온 btw :) – Philip

관련 문제