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.

链接地址: http://www.djcxy.com/p/76976.html

上一篇: 正则表达式:星形重复算子的所有格量词,即\ d **

下一篇: 贪婪的量词不支持他们的语言?