It is clear the ^@[^@]*@
option is much better.
The negated character class is quantified greedily which means the regex engine grabs 0 or more chars other than @
right away, as many as possible. See this regex demo and matching:
When you use a lazy dot matching pattern, the engine matches @
, then tries to match the trailing @
(skipping the .*?
). It does not find the @
at Index 1, so the .*?
matches the a
char. This .*?
pattern expands as many times as there are chars other than @
up to the first @
.
See the lazy dot matching based pattern demo here and here is the matching steps:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…