2012-12-25 51 views
0

我想忽略捕獲組內的空白,有沒有辦法做到這一點,因此:忽略捕獲組內信

preg_split('#test[a-zA-Z0-9\s]*test#', $str, -1, PREG_SPLIT_DELIM_CAPTURE) 

在任何一個:

'A AtestA4 testZ Z' 
'A AtestA4 testZ Z' 
'A AtestA 4 testZ Z' 
'A AtestA4testZ Z' 

所有返回

array(
    [0] => 'A A', 
    [1] => 'testA4', 
    [2] => 'Z Z' 
) 
+0

不要你的意思'的preg_match()','沒有的preg_replace()'? – Barmar

+0

@Barmar哎呀,我其實是分裂 – qwertymk

+0

目前還不清楚你想要什麼,但你可能要求斷言'(?= ...)' – mario

回答

1

我不知道如何將其存檔(我懷疑如果可能的話),但這裏是一個替代的解決方案:

$str='A AtestA 4 testZ Z'; 
$arr=preg_split('#(test[a-zA-Z0-9\s]*test)#', $str, -1, PREG_SPLIT_DELIM_CAPTURE); 
var_dump($arr); //just to debug (compare) 
var_dump(array_map(function($v){ 
    if(preg_match('#test[a-zA-Z0-9\s]*test#',$v)) 
     return str_replace(' ','',preg_replace('#(test[a-zA-Z0-9\s]*)test#','\1',$v)); 
    else 
     return $v; 
},$arr)); 

輸出:

array(3) { 
    [0]=> 
    string(3) "A A" 
    [1]=> 
    string(12) "testA 4 test" 
    [2]=> 
    string(3) "Z Z" 
} 
array(3) { 
    [0]=> 
    string(3) "A A" 
    [1]=> 
    string(6) "testA4" 
    [2]=> 
    string(3) "Z Z" 
} 

在真正的代碼,你可以結合preg_splitarray_map

相關問題