Java/Quickrex regex: missing character in group when using negative lookahaed -
in java (using eclipse quickrex plugin test) i'm using following expression:
(^[\.\(&\)]*)(.*)(?!([\.\(&/\)]*$))
to match text:
.(&&()..abc----....d25..../)(&
the expected goal match 3 groups:
(1) .(&&()..
(2) abc----....d25
(3) ..../)(&
the goal further continue 2nd group , cut preceeding group no.1 , subsequent group no.3. requirement user should define 3 regex expressions himself in 3 separate gui fields.
what happening: 3 groups match fine in quickrex, in group no.2 abc----....d2 "5" @ end missing, , not appearing in group no.3:
[.(&&()..][abc----....d2]5[..../)(&]
environment: eclipse mars 4.5.2, java 1.8.0_66, quickrex 4.3.0
two questions:
is proper way match these groups?
is there logical reason why "5" not included or bug in regex engine?
5 not included because cannot matched due negative lookahead (?![.(&/)]*$) makes engine backtrack , find 2 not followed ., (, &, /, or ) symbols.
to match 2 groups need (as mention, 3rd 1 discarded anyway), may turn greedy * quantifier in second group lazy 1 *? (to match few chars other newline before firs occurrence of subsequent subpattern) , turn negative lookahead group (to make .*? stop right before pattern):
^([.(&)]*)(.*?)([.(&/)]*$) see regex demo
details:
^- start of string/line([.(&)]*)- group 1 capturing 0 or more characters character class(.*?)- 0+ characters other newline few possible first([.(&/)]*$)-., or(, or&, or/, or), 0 or more occurrences end of string.
Comments
Post a Comment