It is quite easy using lookarounds but they not supported in Lucene/Elasticsearch hence I have troubles to get category/vegetables/<colour> from:
category/vegetables/green
category/vegetables/green/avocado
category/vegetables/green/kiwi
category/vegetables/yellow
We can assume that category/vegetables is a static part - I just need to have a regexp that matches category/vegetables/green and category/vegetables/yellow but not others.
I was trying: category\/vegetables\/.*?~(\/) - take anything if it has not a backslash but it doesn't work.
CodePudding user response:
It seems you wanted to use .*?~(\/) as an equivalent of (?:(?!\/).)*?, which is a very inefficient way to write a pattern like [^\/]*? (although [^\/] matches line breaks whereas . does not match line break chars, and, unfortunately, its behavior cannot be redefined in Lucene regex flavor).
Since you do not want to allow slashes in the part after category/vegetables/, you can simply use
category/vegetables/[^/]
Note that Lucene regexes are automatically anchored, so this pattern will require the whole string to match.
