[英]MQTT topic match evaluation
我正在使用 Mqtt (Paho) 實現一個 Android 應用程序。 我有一些組件,我必須在其中將包含通配符的訂閱主題與客戶端已發布到的實際主題進行一般比較。
我只是不明白它,我的“基本”正則表達式技能也無濟於事......
Paho/Java MQTT 中是否有實用程序類來查看
“SENSOR/TEMPERATURE/+/DEGREE/#/ID”(訂閱主題)
適用於
“SENOR/TEMPERATURE/GARDEN/DEGREE/CELSIUS/ABOVEZERO/ID”(實際主題)?
有人知道什么是最好的方法嗎?
謝謝!
編輯:你好 - 我認為這應該是正確的
public static boolean compareTopic(final String actualTopic, final String subscribedTopic){
return actualTopic.matches(subscribedTopic.replaceAll("\\+", "[^/]+").replaceAll("#", ".+"));
}
您的解決方案應該有效,因此在您的示例中,正則表達式將是
"SENSOR/TEMPERATURE/[^/]+/DEGREE/.+/ID"
像http://www.regexplanet.com/advanced/java/index.html這樣的網站是處理此類案例的非常好的資源。
在 util_topic.c 的mosquitto_topic_matches_sub()
函數中有一個如何將 MQTT 主題與訂閱匹配的示例:
https://github.com/eclipse/mosquitto/blob/master/lib/util_topic.c
這看起來很簡單,但有一些問題需要處理,所以你的簡單正則表達式並不能完全勝任。
我已經運行了一些測試,我認為這有效:
String topicExp = topicPattern//
.replaceAll("\\$", "\\\\\\$")//
.replaceAll("\\+", "[^/]+")//
.replaceAll("/\\#$", "(\\$|/.+)");
Pattern pattern = Pattern.compile(topicExp);
boolean match = pattern.matcher(topic).matches();
return match;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.