【发布时间】:2020-07-30 06:50:00
【问题描述】:
我正在为 RabbitMQ 设置用户帐户和权限。 这个想法是用户被称为“user1”,“user2”,......并且有一个单独的队列“所有用户” - 你猜对了 - 所有用户都可以访问。
我想出了以下正则表达式:
^user[0-9]+|all\-users$
并在https://regex101.com/进行了测试
bob [no match]
alice [no match]
user5 [match]
user99 [match]
user [no match]
all-users [match]
它按预期工作。
但是,我的 RabbitMQ 并非如此。
具体来说,当使用任何user{n} 帐户发布到all-users 时,我得到一个403 - ACCESS REFUSED。
如果我将写入权限更改为.*,它可以正常工作,但这不是我想要的。
我还尝试了对我的正则表达式的以下修改,这些修改在 RabbitMQ 中都不起作用,但它们大多在 regex101 中起作用:
-
^user[0-9]+|^all-users$(不转义破折号) -
^(user[0-9]+|all-users)$(只有一组括号) -
^user[0-9]+|^all\\-users$(双转义破折号 - 不起作用) -
^(user[0-9]+)|(all\-users)$(使用群组) -
(^user[0-9]+$)|(^all\-users$)(使用组中的开始/结束标记) -
^user[0-9]+|^all\-users(省略结束标记 - 也与组组合) -
user[0-9]+|all-users(省略所有标记)
我知道其他人也问过类似的问题(here 或 here),但(就像我自己的问题一样)他们都很具体,对我的问题没有多大帮助。
【问题讨论】:
-
首先,正则表达式必须是
^(user[0-9]+|all-users)$,用一个组来使anchors影响所有的alternatives。 -
这也不起作用 - 有或没有转义破折号:(
-
是的,很可能,因为您使用的方法不接受正则表达式。