如何在PHP中拆分字符串*和 - ?

时间:2010-08-24 13:11:30

标签: php regex string

为了拆分字符串,我使用了以下代码。

$string = "-sev*yes-sev1*no-sev2*yes";
split('[-*]', $string).

由于拆分已被弃用,请您建议另一种方法将字符串拆分为数组。我试过爆炸,但它不符合我的目的。 输出应该看起来像,

Array
(
    [0] => sev
    [1] => yes
    [2] =>  sev1
    [3] =>  no
    [4] =>  sev2
    [5] =>  yes
)

感谢大家的回复..我试过了preg_split('[-*]', $string)。它具有明智的字符串特征。我已将其修改为preg_split('/[-*]/', $string)。它运作良好。如果你能解释我的不同,那就太棒了。

7 个答案:

答案 0 :(得分:5)

您可以使用explodepreg_split

答案 1 :(得分:5)

您可以将preg_split用作:

$string = "-sev*yes-sev1*no-sev2*yes";
$array = preg_split('/-|\*/', $string,-1, PREG_SPLIT_NO_EMPTY);

$array = preg_split('/-|\*/', $string);

或者您也可以使用strtok

$tok = strtok($string, "-*");
$array = array();
while ($tok !== false) {
    $array[] = $tok;
    $tok = strtok("-*");
}

修改

 preg_split('[-*]', $string);

[ ]被视为分隔符而不是char类,因此您使用正则表达式-*进行拆分,这意味着零个或多个连字符。

但在

preg_split('/[-*]/', $string);

您正在使用正则表达式[-*]这是一个匹配*-

的char类

答案 2 :(得分:3)

Preg_split正是您要找的。

答案 3 :(得分:1)

只需将分割更改为preg_split。

preg_split() in PHP Manual

答案 4 :(得分:1)

分裂主要有两个替代品:

  • 如果您需要使用正则表达式,请使用preg_split()
  • 如果您不需要使用正则表达式,请使用explode(),因为它比preg_split()
  • 更快

答案 5 :(得分:1)

好吧,假设您的预期输出为array('sev', 'yes', 'sev1', 'no', 'sev2', 'yes'),则可以使用preg_split

$data = preg_split('/[-*]/', $string, -1, PREG_SPLIT_NO_EMPTY);

或者,考虑到您看起来有关键字段(意味着第一个yes绑定到sev,第一个no绑定到sev1等),你可能最好做多次爆炸:

$result = array();
$data = explode('-', $string);
foreach ($data as $str) {
    if (empty($str)) continue;
    list ($key, $value) = explode('*', $str);
    $result[$key] = $value;
}

或者将其转换为网址样式细分,并使用parse_str ...

$tmp = str_replace(array('-', '*'), array('&', '='), $string);
parse_str($tmp, $result);

这两个都会生成如下数组:

array(
    'sev' => 'yes',
    'sev1' => 'no',
    'sev2' => 'yes',
);

答案 6 :(得分:0)

使用preg_split()

$string = "-sev*yes-sev1*no-sev2*yes"; 
$result = preg_split('/[-*]/', $string);