import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "Track number:(?:.(?!Track number:))*subtitles";
final String string = "+ EBML head\n"
+ "|+ EBML version: 1\n"
+ "|+ EBML read version: 1\n"
+ "|+ EBML maximum ID length: 4\n"
+ "|+ EBML maximum size length: 8\n"
+ "|+ Doc type: matroska\n"
+ "|+ Doc type version: 2\n"
+ "|+ Doc type read version: 2\n"
+ "+ Segment, size 467658217\n"
+ "|+ Seek head (subentries will be skipped)\n"
+ "|+ EbmlVoid (size: 4029)\n"
+ "|+ Segment information\n"
+ "| + Timecode scale: 1000000\n"
+ "| + Muxing application: libebml v1.0.0 + libmatroska v1.0.0\n"
+ "| + Writing application: mkvmerge v4.0.0 ('The Stars were mine') built on Jun 6 2010 16:18:42\n"
+ "| + Duration: 5819.819s (01:36:59.819)\n"
+ "| + Date: Sat Jul 3 16:19:00 2010 UTC\n"
+ "| + Segment UID: 0xae 0x0c 0xfb 0x11 0x90 0x39 0x93 0x1b 0x89 0xa4 0xb1 0xaa 0xa0 0x79 0x3d 0x42\n"
+ "|+ Segment tracks\n"
+ "| + A track\n"
+ "| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)\n"
+ "| + Track UID: 863185562\n"
+ "| + Track type: video\n"
+ "| + Default flag: 0\n"
+ "| + Lacing flag: 0\n"
+ "| + MinCache: 1\n"
+ "| + Codec ID: V_MPEG4/ISO/AVC\n"
+ "| + CodecPrivate, length 41 (h.264 profile: High @L3.1)\n"
+ "| + Default duration: 41.708ms (23.976 frames/fields per second for a video track)\n"
+ "| + Language: und\n"
+ "| + Video track\n"
+ "| + Pixel width: 1280\n"
+ "| + Pixel height: 534\n"
+ "| + Display width: 1280\n"
+ "| + Display height: 534\n"
+ "| + A track\n"
+ "| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)\n"
+ "| + Track UID: 3319793313\n"
+ "| + Track type: audio\n"
+ "| + Default flag: 0\n"
+ "| + Codec ID: A_AAC\n"
+ "| + CodecPrivate, length 7\n"
+ "| + Default duration: 42.667ms (23.438 frames/fields per second for a video track)\n"
+ "| + Audio track\n"
+ "| + Sampling frequency: 24000\n"
+ "| + Channels: 2\n"
+ "| + Output sampling frequency: 48000\n"
+ "| + A track\n"
+ "| + Track number: 3 (track ID for mkvmerge & mkvextract: 2)\n"
+ "| + Track UID: 1382186431\n"
+ "| + Track type: subtitles\n"
+ "| + Lacing flag: 0\n"
+ "| + Codec ID: S_TEXT/UTF8\n"
+ "|+ EbmlVoid (size: 1122)\n"
+ "|+ Chapters\n"
+ "| + EditionEntry\n"
+ "| + EditionFlagHidden: 0\n"
+ "| + EditionFlagDefault: 0\n"
+ "| + EditionUID: 2614993839\n"
+ "| + ChapterAtom\n"
+ "| + ChapterUID: 2912241034\n"
+ "| + ChapterTimeStart: 00:00:00.097000000\n"
+ "| + ChapterFlagHidden: 0\n"
+ "| + ChapterFlagEnabled: 1\n"
+ "| + ChapterDisplay\n"
+ "| + ChapterString: 00:00:00.097\n"
+ "| + ChapterLanguage: eng\n"
+ "|+ EbmlVoid (size: 101)\n"
+ "|+ Cluster\n"
+ "|+ \n"
+ "| + A track\n"
+ "| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)\n"
+ "| + Track UID: 3319793313\n"
+ "| + Track type: audio\n"
+ "| + Default flag: 0\n"
+ "| + Codec ID: A_AAC\n"
+ "| + CodecPrivate, length 7\n"
+ "| + Default duration: 42.667ms (23.438 frames/fields per second for a video track)\n"
+ "| + Audio track\n"
+ "| + Sampling frequency: 24000\n"
+ "| + Channels: 2\n"
+ "| + Output sampling frequency: 48000\n\n\n"
+ "+ EBML head\n"
+ "|+ EBML version: 1\n"
+ "|+ EBML read version: 1\n"
+ "|+ EBML maximum ID length: 4\n"
+ "|+ EBML maximum size length: 8\n"
+ "|+ Doc type: matroska\n"
+ "|+ Doc type version: 2\n"
+ "|+ Doc type read version: 2\n"
+ "+ Segment, size 467658217\n"
+ "|+ Seek head (subentries will be skipped)\n"
+ "|+ EbmlVoid (size: 4029)\n"
+ "|+ Segment information\n"
+ "| + Timecode scale: 1000000\n"
+ "| + Muxing application: libebml v1.0.0 + libmatroska v1.0.0\n"
+ "| + Writing application: mkvmerge v4.0.0 ('The Stars were mine') built on Jun 6 2010 16:18:42\n"
+ "| + Duration: 5819.819s (01:36:59.819)\n"
+ "| + Date: Sat Jul 3 16:19:00 2010 UTC\n"
+ "| + Segment UID: 0xae 0x0c 0xfb 0x11 0x90 0x39 0x93 0x1b 0x89 0xa4 0xb1 0xaa 0xa0 0x79 0x3d 0x42\n"
+ "|+ Segment tracks\n"
+ "| + A track\n"
+ "| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)\n"
+ "| + Track UID: 863185562\n"
+ "| + Track type: video\n"
+ "| + Default flag: 0\n"
+ "| + Lacing flag: 0\n"
+ "| + MinCache: 1\n"
+ "| + Codec ID: V_MPEG4/ISO/AVC\n"
+ "| + CodecPrivate, length 41 (h.264 profile: High @L3.1)\n"
+ "| + Default duration: 41.708ms (23.976 frames/fields per second for a video track)\n"
+ "| + Language: und\n"
+ "| + Video track\n"
+ "| + Pixel width: 1280\n"
+ "| + Pixel height: 534\n"
+ "| + Display width: 1280\n"
+ "| + Display height: 534\n"
+ "| + A track\n"
+ "| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)\n"
+ "| + Track UID: 3319793313\n"
+ "| + Track type: audio\n"
+ "| + Default flag: 0\n"
+ "| + Codec ID: A_AAC\n"
+ "| + CodecPrivate, length 7\n"
+ "| + Default duration: 42.667ms (23.438 frames/fields per second for a video track)\n"
+ "| + Audio track\n"
+ "| + Sampling frequency: 24000\n"
+ "| + Channels: 2\n"
+ "| + Output sampling frequency: 48000\n"
+ "| + A track\n"
+ "| + Track number: 3 (track ID for mkvmerge & mkvextract: 2)\n"
+ "| + Track UID: 1382186431\n"
+ "| + Track type: subtitles\n"
+ "| + Lacing flag: 0\n"
+ "| + Codec ID: S_TEXT/UTF8\n"
+ "|+ EbmlVoid (size: 1122)\n"
+ "|+ Chapters\n"
+ "| + EditionEntry\n"
+ "| + EditionFlagHidden: 0\n"
+ "| + EditionFlagDefault: 0\n"
+ "| + EditionUID: 2614993839\n"
+ "| + ChapterAtom\n"
+ "| + ChapterUID: 2912241034\n"
+ "| + ChapterTimeStart: 00:00:00.097000000\n"
+ "| + ChapterFlagHidden: 0\n"
+ "| + ChapterFlagEnabled: 1\n"
+ "| + ChapterDisplay\n"
+ "| + ChapterString: 00:00:00.097\n"
+ "| + ChapterLanguage: eng\n"
+ "|+ EbmlVoid (size: 101)\n"
+ "|+ Cluster\n"
+ "|+ \n"
+ "| + A track\n"
+ "| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)\n"
+ "| + Track UID: 3319793313\n"
+ "| + Track type: audio\n"
+ "| + Default flag: 0\n"
+ "| + Codec ID: A_AAC\n"
+ "| + CodecPrivate, length 7\n"
+ "| + Default duration: 42.667ms (23.438 frames/fields per second for a video track)\n"
+ "| + Audio track\n"
+ "| + Sampling frequency: 24000\n"
+ "| + Channels: 2\n"
+ "| + Output sampling frequency: 48000\n\n\n";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
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