我是preg_split和正则表达式的新手,我做得对吗?


i'm new to preg_split and regex, am I doing this right?

function(){
return preg_split('/[-]/', $_COOKIE[$cookie_login]);
}

我有这个被退回,$_COOKIE[$cookie_login] 是"1-blahblahblah">

然而,当我尝试使用上面的函数检索它时,如下所示:

$string = function();

我得到空字符串,例如$string[0]$string[1]都是空的,我做错了什么?

我正在尝试弄清楚如何使用preg_split就像我使用旧的拆分一样,因为我正在更改为 PHP 5.4

编辑:这是完整的功能:

    function get_session(){
    global $cookie_login;
    if (isset($_COOKIE[$cookie_login])){
        return preg_split('/[-]/', $_COOKIE[$cookie_login]);
    }
}

$string = get_session();

$string[0]是空的,也是$string[1]的,但print_r($string)有效。

你在函数中使用$cookie_login,但该变量没有在任何地方定义。也许它应该只是

$_COOKIE['cookie_login']

相反?

同样,正则表达式中的[-]- 相同。这不是"错误",只是为单个字符指定字符类有些多余。


跟进:好的,现在你已经发布了更多,这里有一个你可以做的重大改变

不要使用全局变量 你已经有一个函数,所以传入 COOKIE 名称作为参数:

function get_sesssion($name) {
   return preg_split('/-/', $_COOKIE[$name]);
}
$sess = get_session('cookie_login');
function(){
  return explode('-', $_COOKIE[$cookie_login]);
}
preg_split('/[-]/', $_COOKIE[$cookie_login]);

由于-是一个特殊的RegEx character,请考虑像这样''-逃离它。

preg_split('~[''-]~', $_COOKIE[$cookie_login]);

^ 我使用~作为RegEx patterns的包装字符,因为/HTML/XML中使用得太广泛了。

使用 isset 检查 cookie 是否存在,我假设它的cookie_login而不是 $cookie_login ,或者它真的很$cookie_login,尝试在你的函数中使用global $cookie_login,或者把它作为一个函数传递argument(这是比设置全局更好的选择(

<?php
  function get_session() {
    global $cookie_login;
    if ( $cookie_login && isset( $_COOKIE[$cookie_login] ) ) {
      return explode( "-", $_COOKIE[$cookie_login] );
    }
    return false;
  }
  $string = get_session( 'some_cookie' );
  var_dump( $string );
?>

或作为函数argument

<?php
  function get_session( $cookie_login = null ) {
    if ( $cookie_login && isset( $_COOKIE[$cookie_login] ) ) {
      return explode( "-", $_COOKIE[$cookie_login] );
    }
    return false;
  }
?>

当你var_dump如果你得到bool(false)这意味着没有设置cookie,否则你至少会得到一个数组:''