我的问题是:
输入:数以千计的缩写信息。
输出:已过滤的消息
过滤:((消息有警报)或(消息有紧急情况))和(消息未恢复)
示例:
Ur001一般用户按用户开设(True)
恐慌区域警报安全系统Zn2区域2名称(错误)
键盘恐慌紧急安全系统Ur1 Uer 1名称(错误)
键盘紧急应急恢复安全系统Ur1 Uer 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
修饰符。