I have problem with lookahead assertion (?=). For example, I have expression:
/Win(?=2000)/
It match Win, if expression is like Win2000, Win2000fgF. I have next expression:
^(?=.*\d)(?=.*[a-z]).*$
It match for digit and lower case letter, for example: 45dF, 4Dd. But I don't know, why it works and match all characters :) I haven't characters, which are before (?=.*\d). I think, only this expression should work:
^.\*(?=.*\d)(?=.*[a-z]).*$
(with \* before expression).  
Could you explain it?
Let's say we are the regex engine and apply the regex ^(?=.*\d)(?=.*[a-z]).*$ to the string 2a.
Starting at position 0 (before the first character):
^: Make sure we're at the start of the string: OK(?=: Let's check if the following regex could match....*: match any number of characters -> 2a. OK.\d: Nope, we're already at the end. Let's go back one character: a --> No, doesn't match. Go back another one: 2 --> MATCH!): End of lookahead, match successful. We're still at position 0!(?=: Let's check if the following regex could match....*: match any number of characters -> 2a. OK.[a-z]: Nope, we're already at the end. Let's go back one character: a --> MATCH!):  End of lookahead, match successful. We're still at position 0!.*: match any number of characters -> 2a --> MATCH!$: Let's see - are we at the end of the string? Yes, we are! --> MATCH!lookaheads don't match, they assert.
this means that if you use a lookahead, you need something that will match what you want if you want to go any further.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With