Returning overlapping regular expressions
Is there a regular expression that will capture all instances of an expression, regardless of whether or not they overlap?
E.g. in /abc/def/ghi
if I want to capture all strings beginning with开发者_如何学编程 /
. The regex (/.*)
only returns the entire string, but I'd want it to match on /def/ghi
and /ghi
as well.
Sure, match an empty string and place a look-ahead after it that captures /.*
in a capturing group:
Matcher m = Pattern.compile("(?=(/.*))").matcher("/abc/def/ghi");
while(m.find()) {
System.out.println(m.group(1));
}
would print:
/abc/def/ghi
/def/ghi
/ghi
精彩评论