import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?m)^(?: +|\\t+)\\+ *(?:VAR|CONST) *\\w+ *=.*(?:\\R^(?> +|\\t+)[^+\\s].*)*";
final String string = " + VAR name1 = var indented by two spaces and the first nonspace character is '+'\n"
+ " + VAR name2 = var indented by 2x2 spaces\n\n"
+ " + VAR name3 = var indented by one \\t\n"
+ " + VAR name4 = the next line with \"name5\" is not valid. missing the = character, should not be matched\n"
+ " + VAR name5\n"
+ " + CONST name6 = the type could be VAR or CONST\n\n"
+ " + VAR multi1 = multiline value where the continuation lines\n"
+ " are indented (starts with two spaces or one tab) and NOT followed by the '+'\n\n"
+ " + VAR multi1 = multiline value\n"
+ " indented\n\n"
+ " + VAR multi1 = multiline value\n"
+ " indented ok too\n\n\n"
+ " + VAR single = this is single line\n"
+ " + because this line even if it is indented, the first nonspace character is '+'\n\n"
+ " + VAR multi2 = multiline\n"
+ " could be\n"
+ " indented\n"
+ " any way\n"
+ " and any number of times\n"
+ " until the first non-indented line\n\n"
+ "the following should NOT match\n\n"
+ "+ VAR some = sould not be matched, because the line isn't indented\n"
+ " + VAR some = sould not be matched, because the line isn't indented at least with TWO spaces or one tab\n"
+ " + SOME name = value not matched because the SOME isn't VAR or CONST";
final Pattern pattern = Pattern.compile(regex);
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