【发布时间】:2013-07-24 21:28:47
【问题描述】:
我需要将一个结构与一组模式进行匹配,并对每个匹配项采取一些措施。
模式应该支持通配符,我需要确定哪些模式与传入结构匹配,示例集:
action=new_user email=*
action=del_user email=*
action=* email=*@gmail.com
action=new_user email=*@hotmail.com
可以实时添加/删除这些模式。可能有数千个连接,每个都有自己的模式,我需要通知每个连接我收到了一个匹配的结构。模式不是完全正则表达式,我只需要用通配符 * 匹配一个字符串(简单匹配任意数量的字符)。
当服务器接收到结构 action=new_user email=testuser@gmail.com 的消息(我们称之为消息 A)并且我需要找出模式 1 和 3 与此消息匹配时,我应该对每个匹配的模式执行操作(发送此结构 A到相应的连接)。
如何以最有效的方式做到这一点?我可以迭代这些模式并一一检查,但我正在寻找更有效和线程安全的方法来做到这一点。可能可以对这些模式进行分组以减少检查。有什么建议可以做到吗?
UPD:请注意,我想匹配乘法模式(thousands),而不是固定的“字符串”(实际上是一个结构),反之亦然。换句话说,我想找出适合给定结构 A 的模式。
【问题讨论】:
-
正则表达式库?概率。最好的。
-
您能否澄清一下:首先,我看到 4 种模式,我认为 1 + 3 匹配(不是 1+2)。其次,您只需要一个是/否的答案(=至少有一个模式匹配),还是您需要一个答案,例如:模式 x,y 匹配,其余不是?第三,模式的集合是固定的,还是可以是任何集合?第四,您的模式语言是什么:完全匹配每个符号,但匹配 * 的任何字符串?还是更通用的正则表达式?
-
您的模式支持哪些类型的通配符?如果 * 是唯一的,那么您可以编写简单的循环来验证这种模式。如果您需要正则表达式,请使用正则表达式库。
-
@PSIAlt:模式 3 不应该也与您给出的示例匹配吗?
-
@Zane 很抱歉这个错误。 1+3 应该匹配。是的,我需要对每个匹配模式采取一些行动(将此结构发送到相应的连接)。编辑帖子以说明这一点。
标签: c++ performance algorithm