在 PHP 中,如果你希望检测 $text
中的机器人的名字时,能够识别出不同的格式(例如大小写不同和带不带 @
符号),可以使用 preg_match
函数进行正则匹配。这样可以不区分大小写,并可以匹配带 @
符号的情况。
下面是一个修改的代码示例,它可以匹配 $this->telegramBotName
(例如 @HzjcpBot
)和 @hzjcpbot
的情况:
// 使用正则匹配,不区分大小写
if (!preg_match('/@?(' . preg_quote(strtolower($this->telegramBotName), '/') . ')/i', strtolower($text))) {
$this->output->info(date('Y-m-d H:i:s') . ' 没有给机器人发信息,不需要处理');
continue;
}
代码解释
preg_quote
: 这个函数用于转义$this->telegramBotName
中的特殊字符,确保它在正则表达式中可以被安全使用。preg_quote
后面添加一个参数/
用于指定转义的字符集(即/
字符)。strtolower
: 将传入的文本和机器人的名字都转换成小写,以便不区分大小写进行比较。preg_match
: 正则表达式/@?({$this->telegramBotName})/i
的意思是匹配可能带有@
符号的机器人名字,其中i
修饰符表示匹配时不区分大小写。
通过这样的方式,无论用户输入的是 @HzjcpBot
还是 @hzjcpbot
,都可以被正确识别。