我的问题是:
输入:数千个缩写消息。
输出:过滤后的消息
过滤器:((消息有警报)或(消息有紧急情况))和(消息没有恢复)
例子:
Ur001 普通用户按用户打开(真)
恐慌区警报安全系统 Zn2 区 2 名称(假)
键盘应急安全系统 Ur1 Uer 1 名称(假)
键盘紧急恢复安全系统 Ur1 Uer 1 名称 (True)
我知道他们的情况有很多类似的问题。哪种方式更好?
由于您的搜索词是已知的 ( "Alarm", "Emergency", "Restore") 正则表达式是一个糟糕的选择。您应该为此使用strpos(或stripos忽略大写)。
话虽如此,如果您想将这些单词作为实际单词而不是子字符串进行搜索(即,您不想"Restored"触发"Restore"匹配,那么您别无选择,只能使用正则表达式。在这种情况下,\b请在单词之前和之后放置找到他们。像这样的东西:
if(preg_match("/\b(?:Alarm|Emergency)\b/i",$str) && !preg_match("/\bRestore\b/i",$str))
如果您特别想要大写,请删除i修饰符。