Why does this RegEx work the way I want it to?

.* is greedy. You want .*? to find up to only the first =.


You appear to be using 'greedy' matching.

Greedy matching says "eat as much as possible to make this work"

try with

<in[^=]*=  

for starters, that will stop it matching the "=" as part of ".*"

but in future, you might want to read up on the

.*?  

and

.+?

notation, which stops at the first possible condtion that matches instead of the last.

The use of 'non-greedy' syntax would be better if you were trying to only stop when you saw TWO characters,

ie:

<in.*?=id

which would stop on the first '=id' regardless of whether or not there are '=' in between.


.* is greedy, so it'll find up to the last =. If you want it non-greedy, add a question mark, like so: .*?

Tags:

Regex