在第一针之前和之前分割弦。最佳版本

时间:2013-03-05 22:32:31

标签: php regex string split

我有字符串,字符串可能包含0或更多冒号“:”

我需要拆分此字符串并获取2个变量:

1)$before =第一次冒号前的字符串
2)$after =第一次冒号后的字符串

如果字符串不包含冒号,$before$after必须为空字符串

aa:ss:dd:44

$before = aa$after = ss:dd:44

我有2个想法,怎么做:

1)

    $str = "aa:ss:dd:44";

    $before = mb_strstr($str, ":", TRUE, "utf-8");

    $after = mb_substr( mb_strstr($str, ":", FALSE, "utf-8"), 1, mb_strlen($str, "utf-8") , "utf-8" );

2)

    $str = "aa:ss:dd:44";

    preg_match_all("#(^[^:]*):(.*)#u", $str, $matches);

    if (isset($matches[1][0])) {
        $before = $matches[1][0];
    }
    else {
        $before = "";
    }


    if (isset($matches[2][0])) {
        $after = $matches[2][0];
    }
    else {
        $after = "";
    }

但我认为两者都不是最佳的,你有更好的想法吗?

3 个答案:

答案 0 :(得分:2)

使用explode

$result = explode(':', $string, 2);
if (count($result) == 1) {
    $before = $after = "";
}
else {
    $before = $result[0];
    $after = $result[1];
}

答案 1 :(得分:1)

这个单行应该可以工作。

list($before, $after) = array_pad(explode(':', $string, 2), 2, '');

答案 2 :(得分:0)

另一种选择是:

$before = $after = '';
$str = "aa:ss:dd:44";
$ar_fields = explode( ":", $str, 2 );
if ( count( $ar_fields ) > 1 ) {
    $before = $ar_fields[0];
    $after = $ar_fields[1];
}