【发布时间】:2021-04-20 14:28:05
【问题描述】:
目前我正在使用这个“正则表达式”消耗多个 topcis:^device-*
这个正则表达式让我订阅
device-gnt-q100-a
device-gnt-q100-a-commands
device-ant-q100-b
device-ant-q100-b-commands
device-ant-q535-a
device-dnq-qpo-def
device-dnq-qpo-def-commands
device-gda-qpp001-xyz
device-gda-qpp001-xyz-commands
是否有可能以某种方式排除所有以 -commands 结尾的主题?
试过了,没有成功:
^(?!device-\w*-commands)device-*
^(?!.*[-]commands$)device-.*$
【问题讨论】:
-
正则表达式是包容性的,所以如果你想忽略任何以
-commands结尾的东西,使用.*$的任何东西都是不正确的,因为它会捕获它。此外,这些名称都不是以device-结尾的,因此您不应该在(?!)组之后使用它。除此之外,device-*也与这些名称不匹配,但device-.*确实...根据您发布的内容,device-[ga]nt-q100-[ab]可以使用,但也许您还有更多示例? -
感谢您的回复。我添加了更多示例。我确实通过使用“^device-*”获得了所有主题,但也许这在 kafka 中很特别,通常不适用于正则表达式?
-
我不确定我是否理解这个问题。正则表达式确实有效。在我看来,负前瞻很难使用,应该尽可能避免
-
不过,如果您想排除
-commands,您的所有示例都将匹配“device后跟三个连字符部分,至少一个字符”,所以^device(-[0-9a-z]{1,6}){3}$
标签: apache-kafka kafka-consumer-api