2012-08-08 78 views
0

在正则表达式中真的很差,提前很抱歉!带有两个分隔符的PHP preg_split并且只捕获一个

我已经尽力解决如何将字符串拆分为具有两个分隔符的数组,并仍然捕获一个并将其包含在最终数组中。 preg_split似乎是理想的,但我的正则表达式让我失望。

例如,如果我有字符串foo = bar AND bar=foo;我想分割在任一空间的字符串,或=字符,但保持=所以阵列看起来像:

Array 
(
    [0] => foo 
    [1] => = 
    [2] => bar 
    [3] => AND 
    [4] => bar 
    [5] => = 
    [6] => foo 
) 

不幸的是,我得到这个:

Array 
(
    [0] => foo 
    [1] => 
    [2] => = 
    [3] => 
    [4] => bar 
    [5] => AND 
    [6] => bar 
    [7] => = 
    [8] => foo 
) 

我我在这里用这个代码(在PHP中):

<!doctype html> 
<?php 

$string = 'foo = bar AND bar=foo'; 

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

?> 
<pre> 
<?php 

print_r($array); 

?> 
</pre> 

我真的很感激任何帮助,你们可以给,谢谢大家!

回答

1

添加PREG_SPLIT_NO_EMPTY标志:

$string = 'foo = bar AND bar=foo'; 
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

现在,this outputs

Array 
(
    [0] => foo 
    [1] => = 
    [2] => bar 
    [3] => AND 
    [4] => bar 
    [5] => = 
    [6] => foo 
) 
+0

你知道有时候,我真的是冲洗!谢谢! – 2012-08-08 15:02:17

1

要么使用PREG_SPLIT_NO_EMPTY核弹攻击 “空” 的比赛:

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

或者,change the regex这样它不会产生空的匹配:

$array = preg_split('/ +|(?<!\G)(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
相关问题