import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?=\\S)(?<text>(?<comment>(?<open>[#;]+)(?:[^\\S\\r\\n]*)(?<value>.+))|(?<section>(?<open>\\[)(?:\\s*)(?<value>[^\\]]*\\S+)(?:[^\\S\\r\\n]*)(?<close>\\]))|(?<entry>(?<key>[^=\\r\\n\\[\\]]*\\S)(?:[^\\S\\r\\n]*)(?<delimiter>:|=)(?:[^\\S\\r\\n]*)(?<value>[^#;\\r\\n]*))|(?<undefined>.+))(?<=\\S)|(?<linebreaker>\\r\\n|\\n)|(?<whitespace>[^\\S\\r\\n]+)";
final String string = "; Comment above the section\n"
+ "Key0=Value0\n"
+ "[Section 1]\n"
+ "Key=Value \n"
+ " [EmptySection]\n"
+ "Dummy text\n"
+ ";Commented Key=Value\n"
+ ";The following empty lines are ignored\n"
+ ";\n"
+ " # \n"
+ " \n"
+ " [ Section 2 ]#Comment after [section]; \n"
+ " Key 1 = Value 1\n"
+ " Key2 = Value 2 and [text in square brackets]\n"
+ " EmptyKey= \n"
+ "[];Noname section ignored\n"
+ " [ Section2 ] Dummy text after section\n"
+ " Key3 =Value 3 (symbols [;] are included) \n"
+ " #Key4 = Value 4 has been commented \n\n"
+ "Dummy text before section [ Sectionnum3 ] \n"
+ " Key 5 = Value 5 \n"
+ " Key6 =Value6 ";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
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