2012-05-23 48 views
0

我正在使用PHP編寫聊天機器人。如何在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或Ÿ它將返回給定的聲明。

什麼樣的:

H * || Y *在正式語言

有沒有這樣的方式來做到這一點?

回答

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 
+0

謝謝,但你能解釋一下這是如何工作? – Shiven

+0

感謝一件事,如果我必須搜索字符串中的同一個關鍵字,讓我們假設如果在字符串中搜索hior hello: preg_match('/(。+)(?: hi | hey | hello)(。+ )/我這是正確的? – Shiven

+1

不,只需刪除'^'在開始 – ThiefMaster

1

可以使用下面的在消息的開始到檢查一個ħÝ(不區分大小寫)

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

您可以使用preg_match:

if (preg_match('/^(H|Y).*/', $message)) { 
    // ... 
1

你可以得到第一個字母$message[0]

+0

這將是具體的我要進一步使用它,通過索引訪問在這些情況下無助於 – Shiven

+1

,所以您可以舉一些您未來想要做的事情的例子。也許我可以糾正我的答案,然後:) –

0

由於您確定要比較第一個字母,因此無需使用正則表達式即可。

if(substr($message, 0, 1) =='H' || substr($message, 0, 1) == 'Y'){ 
     //do something 
    } 
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 
    } 
} 
相關問題