import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?xsm) # free-spacing mode, DOTALL, multi-line\n"
+ "(?=.*?blue) # if blue isn't there, fail without delay\n\n"
+ "########### LINE SKIPPER / COUNTER ############\n"
+ "(?: # start non-capture group\n"
+ " # the aim is to skip lines that don't contain blue\n"
+ " # and capture a corresponding digit sequence\n"
+ " (?: # skip one line that doesn't contain blue\n"
+ " ^ # beginning of line\n"
+ " (?:(?!blue)[^\\r\\n])* # zero or more chars\n"
+ " # that do not start blue\n"
+ " (?:\\r?\\n) # newline chars\n"
+ " ) \n"
+ "# With each line skipped, let Group 1 capture\n"
+ "# an ever-growing portion of the string of numbers\n"
+ " (?= # lookahead\n"
+ " .* # Go to the end of the file\n"
+ " ( # start Group 1\n"
+ " ~\\d+ # match a tilde and digits\n"
+ " (?(1)\\1) # if Group 1 is set, match Group 1\n"
+ " ) # end Group 1\n"
+ " ) # end lookahead\n"
+ ")*+ # end counter-line-skipper: zero or more times\n"
+ " # the possessive + forbids backtracking\n\n\n"
+ ".*? # lazily match any chars up to...\n"
+ "blue # match blue\n"
+ ".* # Get to the end of the data\n"
+ "~ # match a tilde\n"
+ "\\K # drop what we matched so far\n"
+ "\\d+ # match digits. This is the match! \n"
+ "(?=(?(1)\\1)) # if Group 1 has been set, match it\n";
final String string = "Paint it white\n"
+ "Paint it black\n"
+ "Why not blue?\n"
+ "Or red or brown?\n\n"
+ "~10~9~8~7~6~5~4~3~2~1";
final String subst = "";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceFirst(subst);
System.out.println("Substitution result: " + result);
}
}
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