2011-06-11 67 views
0
$str = "blabla and, some more blah"; 
$delimiters = " ,¶.\n"; 
$char_buff = preg_split("/(,) /", $str, -1, PREG_SPLIT_DELIM_CAPTURE); 
print_r($char_buff); 

我得到:如何使preg_split使用PREG_SPLIT_DELIM_CAPTURE

Array ( 
    [0] => blabla and 
    [1] => , 
    [2] => some more blah 
) 

我能弄清楚如何使用括號來獲取逗號在自己的數組元素展現出來 - 但我怎麼能用多個不同的分隔符(例如,$ delimiters變量中的分隔符)來做到這一點?

回答

4

您需要使用m修改你的正則表達式:

<?php 
$str = "blabla and, some more blah. Blah.\nSecond line."; 
$delimiters = " ,¶.\n"; 
$char_buff = preg_split('/([' . $delimiters . '])/m', $str, -1, 
      PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
print_r($char_buff); 

你還需要使用PREG_SPLIT_NO_EMPTY,這樣在你連續獲得了兩場比賽的地方,例如一個逗號後面加一個空格,你不會得到一個空的比賽。

輸出

Array 
(
    [0] => blabla 
    [1] => 
    [2] => and 
    [3] => , 
    [4] => 
    [5] => some 
    [6] => 
    [7] => more 
    [8] => 
    [9] => blah 
    [10] => . 
    [11] => 
    [12] => Blah 
    [13] => . 
    [14] => 

    [15] => Second 
    [16] => 
    [17] => line 
    [18] => . 
) 

取決於你在做什麼,使用strtok可能是,雖然做的更合適的方式。

+0

偉大的 - 那工作。如何學習與匹配有關的正則表達式有什麼好的參考?我已經學會了幾次,然後遺忘了(基本的)正則表達式,因爲我沒有足夠的使用它。我想弄清楚如何捕捉一些分隔符而不是其他分隔符。 – key2starz 2011-06-11 20:49:46

+0

@ key2starz你用'(?:'開始一個非捕獲組,我總是找到[Regular-expression.info](http://www.regular-expressions.info/tutorial.html)一個方便的參考。他們關於[組和反向引用]的頁面(http://www.regular-expressions.info/brackets.html)有更多關於這個主題的信息。 – 2011-06-12 04:16:11

2

使用類似:

'/([,.])/' 

即把每個分隔符在方括號。