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で始まる場合、指定されたステートメントを返すような正規表現を使用できますか。

ある種の何か:

H * || 形式言語の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

次を使用して、メッセージの先頭でHまたはY(大文字と小文字を区別しない)を確認できます。

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 に答える