import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^ *[^\\s]+( +[^\\s]+)*$";
final String string = "# UFIS : User-Friendly and Instant Installer System\n\n"
+ "# Each comment starts with '#' and ends with a new line.\n"
+ "# Each statement is written in one line.\n"
+ "# Commands' and built-in variables' names are always uppercase.\n"
+ "# A custom variable name must have at least one lowercase character and must begin with a letter or the underscore (_).\n\n"
+ "LET APP_NAME = \"MyApp\"\n"
+ "LET APP_VERSION = \"1.0.0\"\n\n"
+ "LET a = MATERIAL \"folderx/\"\n"
+ "a -= \"test.exe\"\n"
+ "a -= \"main.exe\"\n"
+ "a += MATERIAL \"folderz/\"\n"
+ "a += MATERIAL \"README.md\"\n\n"
+ "LET b = MATERIAL \"folderx/test.exe\"\n\n"
+ "LET c = MATERIAL \"folderx/main.exe\"\n\n"
+ "IF INSTALLING\n"
+ " LET iAcceptLicense = INPUT CHECKBOX \"Accept [license](https://myapp.com/license)\" MANDATORY\n"
+ " IF iAcceptLicense == FALSE\n"
+ " QUIT\n"
+ " ENDIF\n\n"
+ " LET iLanguage = INPUT CHOICES \"Vietnamese\" OR \"English\" DEFAULT \"English\" MANDATORY\n\n"
+ " LET INSTALL_DIR = INPUT DIRECTORY \"Installation directory\" POSTFIX \"/${APP_NAME}\" DEFAULT PROGRAM_FILES\n"
+ " LET iInstallTest = INPUT CHECKBOX \"Install test.exe\" DEFAULT FALSE\n"
+ " LET iCreateDesktopShortcut = INPUT CHECKBOX \"Create desktop shortcut\" DEFAULT TRUE\n"
+ " LET iLaunchAtStartup = INPUT CHECKBOX \"Launch program at startup\" DEFAULT TRUE\n\n"
+ " INSTALL a AND c TO INSTALL_DIR # the same as \"${INSTALL_DIR}\"\n\n"
+ " IF iInstallTest == TRUE\n"
+ " INSTALL b TO INSTALL_DIR AS \"test_program.exe\"\n"
+ " ENDIF\n\n"
+ " IF iCreateDesktopShortcut == TRUE\n"
+ " CREATE SHORTCUT FOR c IN DESKTOP_ALL_USERS\n"
+ " ENDIF\n\n"
+ " IF iLaunchAtStartup == TRUE\n"
+ " RUN c AT STARTUP\n"
+ " ENDIF\n"
+ " \n"
+ " WORK registry_work\n"
+ " CREATE REGSZ \"HKEY_LOCAL_MACHINE/Software/${APP_NAME}\" VALUE \"1\"\n"
+ " ENDWORK\n"
+ " \n"
+ " CPP\n"
+ " #include <iostream>\n"
+ " \n"
+ " void entry() {\n"
+ " std::cout << \"Not very intelligent\";\n"
+ " }\n"
+ " ENDCPP\n"
+ " \n"
+ " CALL entry\n\n"
+ "ELIF RUNNING\n"
+ " RUN c\n\n"
+ "ELSE # UNINSTALLING\n"
+ " UNDO ALL EXCEPT registry_work\n\n"
+ "ENDIF\n";
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