You are missing the fact that a regex engine works from left to right, position by position, and succeeds as soon as it finds a match at the current position.
In your example, the first position where the pattern succeeds is at the second "a".
The laziness works only on the right side.
If you want to obtain "xxx", a better way is to use a negated character class [^ab]*
instead of .*?
Note: not exactly related to the subject, but good to know: a DFA regex engine will try to get the largest result in case of alternation, a NFA gives you the first that succeeds.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…