import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^((\\s+|)(\\/\\/|#)|$)";
final String string = "##################################################################\n"
+ "#### /etc/apt/apt.conf.d/50unattended-upgrades ###\n"
+ "// Automatically upgrade packages from these (origin:archive) pairs\n"
+ "//\n"
+ "// Note that in Ubuntu security updates may pull in new dependencies\n"
+ "// from non-security sources (e.g. chromium). By allowing the release\n"
+ "// pocket these get automatically pulled in.\n"
+ "Unattended-Upgrade::Allowed-Origins {\n"
+ " \"${distro_id}:${distro_codename}\";\n"
+ " \"${distro_id}:${distro_codename}-security\";\n"
+ " // Extended Security Maintenance; doesn't necessarily exist for\n"
+ " // every release and this system may not have it installed, but if\n"
+ " // available, the policy for updates is such that unattended-upgrades\n"
+ " // should also install from here by default.\n"
+ " \"${distro_id}ESMApps:${distro_codename}-apps-security\";\n"
+ " \"${distro_id}ESM:${distro_codename}-infra-security\";\n"
+ "// \"${distro_id}:${distro_codename}-updates\";\n"
+ "// \"${distro_id}:${distro_codename}-proposed\";\n"
+ "// \"${distro_id}:${distro_codename}-backports\";\n"
+ "};\n\n"
+ "// Python regular expressions, matching packages to exclude from upgrading\n"
+ "Unattended-Upgrade::Package-Blacklist {\n"
+ " // The following matches all packages starting with linux-\n"
+ "// \"linux-\";\n\n"
+ " // Use $ to explicitely define the end of a package name. Without\n"
+ " // the $, \"libc6\" would match all of them.\n"
+ "// \"libc6$\";\n"
+ "// \"libc6-dev$\";\n"
+ "// \"libc6-i686$\";\n\n"
+ " // Special characters need escaping\n"
+ "// \"libstdc\\+\\+6$\";\n\n"
+ " // The following matches packages like xen-system-amd64, xen-utils-4.1,\n"
+ " // xenstore-utils and libxenstore3.0\n"
+ "// \"(lib)?xen(store)?\";\n\n"
+ " // For more information about Python regular expressions, see\n"
+ " // https://docs.python.org/3/howto/regex.html\n"
+ "};\n\n"
+ "// This option controls whether the development release of Ubuntu will be\n"
+ "// upgraded automatically. Valid values are \"true\", \"false\", and \"auto\".\n"
+ "Unattended-Upgrade::DevRelease \"auto\";\n\n\n"
+ "##################################################################\n"
+ "#### /etc/cron.weekly/man-db ###\n\n"
+ "#!/bin/sh\n"
+ "#\n"
+ "# man-db cron weekly\n\n"
+ "set -e\n\n"
+ "if [ -d /run/systemd/system ]; then\n"
+ " # Skip in favour of systemd timer.\n"
+ " exit 0\n"
+ "fi\n\n"
+ "iosched_idle=\n"
+ "# Don't try to change I/O priority in a vserver or OpenVZ.\n"
+ "if ! egrep -q '(envID|VxID):.*[1-9]' /proc/self/status && \\\n"
+ " ([ ! -d /proc/vz ] || [ -d /proc/bc ]); then\n"
+ " iosched_idle='--iosched idle'\n"
+ "fi\n\n"
+ "if ! [ -d /var/cache/man ]; then\n"
+ " # Recover from deletion, per FHS.\n"
+ " install -d -o man -g man -m 0755 /var/cache/man\n"
+ "fi\n\n"
+ "# regenerate man database\n"
+ "if [ -x /usr/bin/mandb ]; then\n"
+ " # --pidfile /dev/null so it always starts; mandb isn't really a daemon,\n"
+ " # but we want to start it like one.\n"
+ " start-stop-daemon --start --pidfile /dev/null \\\n"
+ " --startas /usr/bin/mandb --oknodo --chuid man \\\n"
+ " $iosched_idle \\\n"
+ " -- --quiet\n"
+ "fi\n\n"
+ "exit 0";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
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