PHP - 如何检查字符串是否包含单词?

时间:2014-11-14 23:17:53

标签: php stripos

晚上好。 我正在制作一个IRC机器人,当你提到他时会做出回应。我想知道的是当有人真正说出他的名字时,如何让他回复。这就是我到目前为止($ match [3]是有人在频道上说的消息,是的,条形码是因为我希望它不区分大小写):

if (stripos($match[3], "ircBot") !== false) {
    $isMentioned = true;
}else { $isMentioned = false; }

虽然这实际上检测到有人是否说出了他的名字,但只有在消息的开头提到他才会有效,例如:

  • “ircBot正处于此发送的开头”将使$ isMentioned为真
  • “这个传票之间存在冲突”会使$ isMentioned false
  • “在这个传票的最后是ircBot”会使$ isMentioned false

如果“ircBot”在$ match [3]内任何地方而不仅仅是开头

,我希望它返回true

3 个答案:

答案 0 :(得分:1)

您必须寻找字边界以避免有人称为MircBot

// using in_array
$isMentioned = in_array('ircbot', preg_split('/\s+/', mb_strtolower($match[3])));

// using regex word boundaries
$isMentioned = preg_match('/\b(ircBot)\b/i', $match[3]);

http://3v4l.org/lh3JT

答案 1 :(得分:0)

使用stristr代替

if (stristr($match[3], "ircBot") !== false) {
    $isMentioned = true;
}else { $isMentioned = false; }

答案 2 :(得分:0)

我认为您的错误在其他地方,例如$ match [3]的构造。这很好用:

$isMentioned = stripos('This is in the middle of ircBot the string','ircbot') !== false;
echo( $isMentioned ? 'Is Mentioned' : 'Sad ignored bot');