如何在多个分隔符上拆分字符串以保留一些分隔符?

时间:2015-06-10 15:40:28

标签: php regex string split explode

我正在寻找一种基于某些分隔符在几个单词中拆分字符串的方法。

例如,字符串word1&word2 !word3 word4 &word5应该给我一个包含以下单词的数组:

word1
&word2
!word3
word4
&word5

如何达到? 我用str_replace()尝试了几个解决方案,但我无法找到获得我需要的最佳方法。 也许解决方案可能是使用正则表达式,但我不知道如何使用它们。

2 个答案:

答案 0 :(得分:2)

试试这个:

$src='word1&word2 !word3 word4 &word5';
$arr=explode(' ',$src=preg_replace('/(?<=[\w])([&!])/',' $1',$src));
echo join('<br>',$arr); // present the result ...

首先将由[&!]的单个字符组成的组的任何出现更改为' $1'(=本身,前面带有一个&#39; - 字符空白)然后explode()使用空格作为分隔符的字符串。

如果您需要处理多个空格作为单词之间的分隔符,您当然可以将(更快的)explode(' ',...)替换为稍微更多的&#34;精炼&#34; preg_split('/ +/',...)

答案 1 :(得分:1)

您可以使用preg_split,并根据需要进行一些自定义。见下面的例子: -

function customExplode($string){
    if($matches = preg_split('/[\s&!]+/i', $string, null, PREG_SPLIT_OFFSET_CAPTURE)){
        $return = array();
        foreach ($matches as $match) {
            $return[] = (($match[1]-1) >= 0) ? substr($string, $match[1]-1, 1).$match[0] : $match[0];
        }
        return $return;
    } else {
        return $string;
    }
}
$word = 'word1&word2 !word3 word4 &word5';
print_r(customExplode($word));

结果

Array
(
    [0] => word1
    [1] => &word2
    [2] => !word3
    [3] =>  word4
    [4] => &word5
)