Hi,
> I was faced with a need of nonfixed length lookbehind two times:
> 1. when data came by stream of 24kB blocks and I need to find a last
>numeric in each of it
> /.{24000}(?<=(\d++)\D*+)/g
Even if this would work, the result of this would be always the last position
of the subject, and that is probably not what you want.
/(?s).*(?<!\d)\K(?=(\d++))/
This provides the starting position of the decimal number, with going back from
the input. This is also much faster than scanning [\G,n-1].
> 2. when I have a json-array file and want to find every top-level element
> that have "id" tag at any nested level
> /(\{(?:[^{}]++|(?1))*+\})(?<=\{"id":"(?>.*?").*)/g
Well, I would first first the top level element first then scan the nested
levels. This is closer to the concept how regexes work.
> 2. There are cases where there is no no programming language available for
> user, only regex. And exactly this case is in one of my application.
If you have such issues frequently I would recommend to support some scripting
language. There are many small and fairly quick JS engines, which are easy to
add. If I remember correctly Duktape or QuickJS are just 1 file "applications".
But if you really want [\G,n-1] searches, you can consider adding it using
callouts. I have a fun project which combines pcre2 with shell commands, and it
provides so much power:
https://github.com/zherczeg/pcresp
E.g. I can search a time in the output and covert it to seconds using python
print command with one step. You can see how callouts can be "exploited" to
control matches.
Regards,
Zoltan
--
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev