带有preg_match的开关盒(+以/ strpos开头)

时间:2017-01-26 23:56:39

标签: php regex

我想完成这样的事情:

!say some message

然后被带到一个函数,该函数继续内容。你可以想象,我正在听一些文字输入。现在我正面临这个问题,像这样的字符串也会触发case

this is !say some text

代码:

$prefix = "!";
switch ($message->content) {
    case preg_match("/[^.*]$prefix . 'say' (.*) /", $message->content):
    _say($message);
    break;
}

function _say($message)
{
    $parts = explode("!say", $message->content);
    return $message->channel->sendMessage(trim($parts[1]), true);
}

根据我的理解,正则表达式是正确的(也在regexp-tester上确认)。

也使用substr进行了测试,但也没有。{/ p>

case substr($message->content, 0, 3) == $prefix . 'say' :

我做错了什么?

1 个答案:

答案 0 :(得分:1)

命令是一个命令,它不应该是被愚弄的东西。因此,我建议进行简单的字符串比较,而不是使用正则表达式:

$prefix = "!";

function _say($message){
    return $message->channel->sendMessage(trim($message), true);
}


if($message->content[0] == $prefix){
  if($p = strpos($message->content, ' ') !== false){
    $cmd = substr($message->content, 1, $p);

    switch($cmd){
      case 'say':
        _say(substr($message->content, $p));
        break;
      default:
        die('unknown command');
    }

  } else {
    die('empty cmd');
  }
} else {
  die('no command');
}