我的问题是:
输入:数千个缩写消息。
输出:过滤后的消息
过滤器:((消息有警报)或(消息有紧急情况))和(消息没有恢复)
例子:
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
修饰符。