import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?P<leading> (?<=^/) /+ (?# Matches extra slashes after the first one) )\n"
+ "|\n"
+ "(?P<middle> (?<!^) (?<=/) /+ (?!$) (?# Matches extra slashes in the middle of the path) )\n"
+ "|\n"
+ "(?P<trailing> (?<!^) /+ (?=$) (?# Matches all trailing slashes) )";
final String string = "== Description ==\n"
+ "match all extraneous (repeating) slashes from a path.\n"
+ "Also remove trailing slashes.\n"
+ "Keep one trailing slash if it's the string contains only slashes.\n\n"
+ "== Should not match ==\n"
+ "/some/dir\n"
+ "/some/dir\n"
+ "/\n\n"
+ "== Should match ==\n"
+ "/some/dir/\n"
+ "some/dir//\n"
+ "some/dir///\n"
+ "//some//dir//\n"
+ "//some///dir/\n"
+ "///very///wrong//////path//with///many/extra////slashes/\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html