On Sep 25, 2014, at 13:06, Guy Steele <guy.ste...@oracle.com> wrote:
> (A lurker sticking his nose in here! :-) Is it your intent also to match > "30s1h" or "20m30m" as a time duration? > > If not, you might be better off with a pattern such as > "((\\d+)h)?((\\d+)m)?((\\d+)s)?" and then the whole problem caused by the > outer "+" iteration disappear (but you may need to check whether the original > string was empty). Yes, this is much better. > > But maybe that takes all the fun out of it. Let someone else enjoy it then. :-) Thanks Max > > --Guy Steele > > On Sep 25, 2014, at 12:51 AM, Wang Weijun <weijun.w...@oracle.com> wrote: > >> Hi Sherman >> >> I want to match a time duration like "1h20m30s" and "2h". It looks like if I >> directly use the pattern "((\\d+)([hms]))+", group(2) and group (3) only >> return the last match (i.e. 30 and s for 1h20m30s). So I tried multiple >> matching with "(\\d)([hms])" only, but find() does not always match from the >> beginning, and lookingAt() does not advance after one call. >> >> This is my code now; >> >> int start = 0; >> while (true) { >> if (!m.find() || m.start() != start) { >> throw new Exception(); >> } >> start = m.end(); >> print(m.group(1), m.group(2)); >> if (m.hitEnd()) break; >> } >> print("Done"); >> >> Is this the correct way? >> >> Thanks >> Max >> >