Can you explain this named group start position in a Java regex? -
i'm stuck in weird situation here, trying match optional named group in java (8) regex.
for example, following match happens expected , assertions raise no error:
pattern pat = pattern.compile("begin.+(?<middle>middle).+end"); matcher matcher = pat.matcher("begin middle end"); asserttrue(matcher.find()); assertequals(6, matcher.start("middle")); assertequals(12, matcher.end("middle")); however, if change regex to
begin.+(?<middle>(middle)?).+end matcher.start("middle") returns 12, if match empty.
if change regex
begin.+(?<middle>middle)?.+end matcher.start("middle") returns -1, if there's no match.
i'm wondering if it's possible have optional named groups @ in java.
what mistake making?
it has nothing named groups.
the reason .+ right after begin greedily matches string "middle". named group matches nothing (which it's explicitly allowed to).
the solution make first .+ non-greedy, e.g.:
begin.+?(?<middle>(middle)?).+end
Comments
Post a Comment