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 

Reply via email to