 A+
First off, this has sort of been asked before. However I haven't been able to modify this to fit my requirement.
In short: I want a regex that matches an expression if and only if it only contains digits, and there are 5 (or more) increasing consecutive digits somewhere in the expression.
I understand the logic of
^(?=/d{5}$)1*2*3*4*5*6*7*8*9*0*$
however, this limits the expression to 5 digits. I want there to be able to be digits before and after the expression. So 1111345671111
should match, while 11111
shouldn't.
I thought this might work:
^[09]*(?=/d{5}0*1*2*3*4*5*6*7*8*9*)[09]*$
which I interpret as:

^$
: The entire expression must only contain what's between these 2 symbols 
[09]*
: Any digits between0
9
, 0 or more times followed by: 
(?=/d{5}0*1*2*3*4*5*6*7*8*9*)
: A part where at least 5 increasing digits are found followed by: 
[09]*
: Any digits between0
9
, 0 or more times.
However this regex is incorrect, as for example 11111
matches. How can I solve this problem using a regex? So examples of expressions to match:
00001459000
12345
This shouldn't match:
abc12345
9871234444
While this problem can be solved using pure regular expressions (the set of strictly ascending fivedigit strings is finite, so you could just enumerate all of them), it's not a good fit for regexes.
That said, here's how I'd do it if I had to:
^/d*(?=/d{5}(/d*)$)0?1?2?3?4?5?6?7?8?9?/1$
Core idea: 0?1?2?3?4?5?6?7?8?9?
matches an ascending numeric substring, but it doesn't restrict its length. Every single part is optional, so it can match anything from ""
(empty string) to the full "0123456789"
.
We can force it to match exactly 5 characters by combining a lookahead of five digits and an arbitrary suffix (which we capture) and a backreference /1
(which must exactly the suffix matched by the lookahead, ensuring we've now walked ahead 5 characters in the string).
Live demo: https://regex101.com/r/03rJET/3
(By the way, your explanation of (?=/d{5}0*1*2*3*4*5*6*7*8*9*)
is incorrect: It looks ahead to match exactly 5 digits, followed by 0 or more occurrences of 0
, followed by 0 or more occurrences of 1
, etc.)