2

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("#", ".+"));
}
4

3 に答える 3

3

あなたのソリューションはうまくいくはずなので、あなたの例の場合、正規表現は次のようになります

"SENSOR/TEMPERATURE/[^/]+/DEGREE/.+/ID"

http://www.regexplanet.com/advanced/java/index.htmlのような Web サイトは、このような場合に非常に優れたリソースです。

于 2015-06-15T15:03:27.263 に答える
3

mosquitto_topic_matches_sub()util_topic.c の関数でMQTT トピックをサブスクリプションと一致させる方法の例があります。

https://github.com/eclipse/mosquitto/blob/master/lib/util_topic.c

それは簡単に思えますが、対処すべき落とし穴があるため、単純な正規表現では十分に機能しません。

于 2015-06-22T15:51:43.460 に答える