分成几个字符并将它们包含在各个部分中

Rud*_*die 2 php regex split

我想在几个字符(被分割字符串+,~,>@,但我希望这些字符是返回部分的一部分.

我试过了:

$parts = preg_split('/\+|>|~|@/', $input, PREG_SPLIT_DELIM_CAPTURE);
Run Code Online (Sandbox Code Playgroud)

结果只有2个部分应该有5个,而split-char不是部分[1]的一部分.

我也尝试过:

$parts = preg_split('/\+|>|~|@/', $input, PREG_SPLIT_OFFSET_CAPTURE);
Run Code Online (Sandbox Code Playgroud)

结果是1部分太少(4而不是5),最后部分包含split-char.

没有标志 preg_split,结果几乎是完美的(尽可能多的部分),但所有的分裂字符都消失了.

例:

$input = 'oele>boele@4 + key:type:id + *~the end'; // spaces should be ignored
$output /* should be: */
        array( 'oele', '>boele', ' @4 ', '+ key:type:id ', '+ *', '~the end' );
Run Code Online (Sandbox Code Playgroud)

是否有一个spl函数或标志来做这个或我必须自己做一个=(

Dor*_*use 6

你错过了limit参数的赋值,这就是为什么它的返回量低于你的预期,试试:

$parts = preg_split('/\+|>|~|@/', $input, -1, PREG_SPLIT_OFFSET_CAPTURE);
Run Code Online (Sandbox Code Playgroud)


cod*_*ict 6

$parts = preg_split('/(?=[+>~@])/', $input);
Run Code Online (Sandbox Code Playgroud)

看见

由于您希望分隔符成为下一个分割片段的一部分,因此您的分割点恰好位于分隔符之前,这可以通过使用正面预测轻松完成.

(?=     : Start of positive lookahead
 [+>~@] : character class to match any of your delimiters.
)       : End of look ahead assertion.
Run Code Online (Sandbox Code Playgroud)

实际上,您要求preg_split 在分隔符之前的点处拆分输入字符串.