greedy quantifiers in languages that don't support them?
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.
上一篇: 正则表达式:星形重复算子的所有格量词,即\ d **
下一篇: 贪婪的量词不支持他们的语言?