[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Patterns
- From: Paul Ducklin <pducklin@...>
- Date: Thu, 15 Dec 2022 01:26:36 +0000
Why try to convert the matching string into a regexp or Lua pattern at all? Sometimes regexp-type code is simply the wrong way to do things, but something we do merely from familiarity.
It sounds as though matching an input string X against the expression “/sport/#” in the fashion you describe is equivalent to:
X == “/sport” or X:sub(1,7) == “/sport/“
So why not just do it like that, and sidestep regexps, patterns, wildcards, state machines, and all that complexity? The code above is simpler, faster and self-documenting…
(You can make the code generic, of course, with the pattern being a parameter, but you get the idea.)
> On 14 Dec 2022, at 20:54, Tristan Kohl <@web.de> wrote:
>
> Hi folks,
>
> I am implementing a module that mimics a MQTT broker. For this I am
> transforming topics passed to the register function so I can run
> string.match() on incoming messages.
>
> Right now I am stuck how to correctly handle the multilevel wildcard:
> http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718107
>
> Suppose the topic filter "/sport/#" and these published message topics:
> /sport
> /sport/racing
> /sport/racing/champion
> /sporting
>
> Only the first three are allowed to match, so "/sport.*" is not an
> option as that would match the forth one as well. On the other hand
> "/sport/.*" would not match the first one.
>
> Any ideas?
>
> Cheers
> Tristan