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'
)
4

1 に答える 1

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_split実際のコードでは、をに組み合わせることができますarray_map

于 2012-12-25T03:19:59.277 に答える