如何使用PREG_SPLIT_DELIM_CAPTURE preg_split

key*_*arz 0 php regex

$str = "blabla and, some more blah";
$delimiters = " ,¶.\n";
$char_buff = preg_split("/(,) /", $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($char_buff);
Run Code Online (Sandbox Code Playgroud)

我明白了:

Array ( 
  [0] => blabla and 
  [1] => , 
  [2] => some more blah 
)
Run Code Online (Sandbox Code Playgroud)

我能够弄清楚如何使用括号来使逗号显示在它自己的数组元素中 - 但是我如何使用多个不同的分隔符(例如,$ delimiters变量中的那些分隔符)来执行此操作?

Use*_*ode 6

您需要[在正则表达式上使用修饰符:

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

您还需要使用,]以便在连续获得两个匹配项的位置,例如逗号后跟空格,您不会得到空匹配.

产量

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] => .
)
Run Code Online (Sandbox Code Playgroud)

根据您正在做的事情,使用strtok可能是一种更合适的方式.