0

我正在用 PHP 编写一个聊天机器人。

这是代码的一部分

public function messageReceived($from, $message){
        $message = trim($message);

                if(stristr($message,"hi")|| stristr($message,"heylo")||stristr($message,"hello")||stristr($message,"yo")||stristr($message,"bonjour")){
            return "Hello,$from,how are you"; // help section
        }

现在在 if 语句中,我可以使用正则表达式,如果消息以 : H 或 Y 开头,它将返回给定的语句。

某种东西:

高* || Y* 在正式语言中

有没有这样的方法?

4

6 回答 6

6
if(preg_match('/^(?:hi|hey|hello) (.+)/i', $str, $matches)) {
    echo 'Hello ' . $matches[1];
}

解释:

/ # beginning delimiter
  ^ # match only at the beginning of the string
  ( # new group
    ?: # do not capture the group contents
    hi|hey|hello # match one of the strings
  )
  ( # new group
    . # any character
      + # 1..n times
    )
/ # ending delimiter
  i # flag: case insensitive
于 2012-05-23T06:29:02.223 回答
1

您可以使用以下内容检查消息开头的HY(不区分大小写)

preg_match('/^H|Y/i', $message)
于 2012-05-23T06:29:58.177 回答
1

您可以为此使用 preg_match :

if (preg_match('/^(H|Y).*/', $message)) {
    // ...
于 2012-05-23T06:30:37.103 回答
1

你可以只用 . 得到第一个字母$message[0]

于 2012-05-23T06:32:31.910 回答
0

由于您确定要比较第一个字母,因此无需使用正则表达式即可。

    if( substr($message, 0, 1) =='H' || substr($message, 0, 1) == 'Y' ){
        //do something
    }
于 2012-05-23T06:35:16.310 回答
0

您的整个函数将如下所示:

public function messageReceived($from, $message){

  $message = trim($message);

  if(preg_match('/^H|Y/i', $message){

     return "Hello $from, how are you"; // help section

  }
  else {
     // check for other conditions
  }
}
于 2012-05-23T06:46:20.997 回答