2012-05-03 61 views
1

在這個例子中preg_split中使用的正則表達式是什麼?preg_split由單詞包括尾隨空格

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

輸出

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

我在PHP中的正則表達式不知道。我只需要儘量減少代碼。也許有人可以幫我解釋一下關於回答的正則表達式

+0

如果你遇到了一些你已經嘗試完成的事情,而不是按需編寫代碼,人們在這裏可以幫助你。 – jprofitt

+0

@jprofitt儘管爲代表做這些簡單的請求很誘人。 – philwinkle

+0

(\ w +)應該匹配減去空格的所有單詞。或者你需要保持空間完好嗎? – Philip

回答

0

那麼一點點,這裏有一個選項:

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

分步服用。

  1. 斯普利特空白的任何金額 - \s+

  2. 但要記住的空白 - 這就是括號和PREG_SPLIT_DELIM_CAPTURE標誌。

    這給你一個數組,看起來像這樣:

    array('Word', ' ', 'with', ' ', 'white', ' ', 
         'trailing', ' ', 'spaces.', ' ') 
    
  3. 結果傳遞給array_chunk與2

    一個CHUNK_SIZE現在我們有2個元素的數組的數組:

    array(array('Word', ' '), array('with', ' '), ...) 
    
  4. 將結果傳遞給array_map,回調爲join - 將每對字符串int o一個字符串,給了我們所期望的結果:

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

編輯:我看到OP想要一個解釋。 基本上()將一個單詞(s)\ 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