-PHP正则表达式或strpos()在我的条件下?

时间:2013-03-01 00:17:35

标签: php regex strpos

我的问题是:

输入:数以千计的缩写信息。

输出:已过滤的消息

过滤:((消息有警报)或(消息有紧急情况))和(消息未恢复)

示例:

  1. Ur001一般用户按用户开设(True)

  2. 恐慌区域警报安全系统Zn2区域2名称(错误)

  3. 键盘恐慌紧急安全系统Ur1 Uer 1名称(错误)

  4. 键盘紧急应急恢复安全系统Ur1 Uer 1名称(真)

  5. 我知道在他们的条件中有一堆类似的问题。哪种方式更好?

1 个答案:

答案 0 :(得分:3)

由于您的搜索字词已知("Alarm""Emergency""Restore"),因此正则表达式选择不佳。您应该使用strpos(或stripos忽略大小写)。

话虽如此,如果你想将这些单词作为实际单词而不是作为子串搜索(即你希望"Restored"不要触发"Restore"匹配,那么你别无选择使用正则表达式。在这种情况下,在单词之前和之后放置\b以找到它们。像这样:

if(preg_match("/\b(?:Alarm|Emergency)\b/i",$str) && !preg_match("/\bRestore\b/i",$str))

如果您特意想要大写,请删除i修饰符。