import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?(DEFINE)(?'value'(?:\\N*(?:\\n(?:(?: {8}|\\t)\\N*))*)))\\s*pool: (?'pool'\\g'value')\\n\\s*state: (?'state'\\g'value')\\n((?:\\s*status: (?'status'\\g'value')\\n)?(?:\\s*action: (?'action'\\g'value')\\n)?\\s*scan: (?'scan'\\g'value')\\n)?\\s*config:\\n\\n(?'config'\\g'value')\\n\\s*errors: (?'errors'\\g'value')";
final String string = " pool: zfs\n"
+ " state: ONLINE\n"
+ "config:\n\n"
+ " NAME STATE READ WRITE CKSUM\n"
+ " zfs ONLINE 0 0 0\n"
+ " ata-HGST_HTS725050A7E630_TF655AY92LL99L ONLINE 0 0 0\n\n"
+ "errors: No known data errors";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(string);
if (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