Consider this regex: <(.*)>
Applied against this string:
<2356> <my pal ned> <!@%@>
Obviously, it will match the entire string because of the greedy *
. The best solution would be to use a non-greedy quantifier, like *?
. However, many languages and editors don't support these.
For simple cases like the above, I've gotten around this limitation with a regex like this: <([^>]*)>
But what could be done with a regex like this? start (.*) end
Applied against this string:
start 2356 end start my pal ned end start !@%@ end
Is there any recourse at all?
If the end condition is the presence of a single character you can use a negative character class instead:
<([^>]*)>
For more complexes cases where the end condition is multiple characters you could try a negative lookahead, but if lazy matching is not supported the chances are that lookaheads won't be either:
((?!end).)*
Your last recourse is to construct something horrible like this:
(en[^d]|e[^n]|[^e])*
I replace .
with [^>]
where >
in this case is the next character in the RE.
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