PreviousNextTracker indexSee it online !

(9/231) 1373607 - positive lookahead does only work in the end

the positive look ahead expression (?= ) seems to be
working only in the end of the expression. For ex. if
an expression for some words inside tags is needed we
expect this to do the work:
(?= <([^>]*))thewordIsearch(?=([^<]*)>)

it doesn't work, but of course if I remove look
ahead: "(<([^>]*))thewordIsearch(?=([^<]*)>)" it
works, but it doesnt hide the text before the word I
search for.


Submitted velniava - 2005-12-05 - 15:18:12z Assigned nobody
Priority 5 Category search and replace
Status Open Group minor bug
Resolution None Visibility No

Comments

2007-02-14 - 21:25:57z
rschwenn
Logged In: YES
user_id=1486645
Originator: NO

Sill valid for jEdit 4.3pre9.

SUN JRE 1.5.0_11
WinXP SP2
2010-03-27 - 18:37:04z
kerik-sf
I'm by no mean a regexp expert (far from it), but shouldn't one use a positive look-behind ?
At first, I tried (?<=<([^>]*))bonjour(?=([^<]*)>)
but got a
java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum
length near index 11 (?<=<([^>]*))bonjour(?=([^<]*)>)
So I added an explicit bound and found that (?<=<([^>]{0,100}?))bonjour(?=([^<]*)>) works
2010-03-27 - 18:51:34z
kerik-sf
my suggestion doesn't work on inputs like this : "<lebonjour>" while it should !
It's a bug in the regex engine,
see : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6284152
2010-03-27 - 18:57:30z
kerik-sf
the workaround suggested in the sun bug report works : "bonjour(?<=<([^>]{0,100}bonjour))(?=([^<]*)>)".

Attached is a beanshell to demonstrate the problem with java.util.regex : open it and run it.
The second alternative works, but the first one doesn't.

Attachments

2010-03-27 - 18:57:36z
kerik-sf
test_positive_lookahead.bsh

beanshell to run on itself