On Tue, 9 Jul 2019, I wrote: > I have put this on the wish list, but until I look at the code, I have > no idea whether it will be easy or straightforward to implement in the > interpreter. I will try to investigate soon. If it turns out to be > possible in the interpreter, it will up to Zoltan to decide whether to > add it to JIT.
It turned out to be very easy to implement in the interpreter, but there was quite a lot of necessary but straightforward work to add new opcodes and process them in the various scans of compiled patterns. Also, the documentation took some time. I have done this work, and committed the patches. The new code supports both (*napla: and (*naplb: and although I haven't been able to think of a good example for the latter, here is a test example: /(*naplb:(.)..|(.)...)(\1|\2)/ abcdb 0: b 1: b 2: <unset> 3: b abcda 0: a 1: <unset> 2: a 3: a For a non-atomic lookaround to be useful, it must change the captured groups after a backtrack, and the rest of the pattern must refer to a changed group. This means there is no point in even looking at the pcre2_dfa_match() code, because DFA matching does not support capturing. At the moment, there is no JIT support for these new lookarounds; JIT compilation will fail. It is quite possible that I have missed one or more places in the code that need updating for the new opcodes. Please test this if you can. Philip -- Philip Hazel -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev