import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "\\s* # white spaces\n"
+ "########################## KEYS START ##########################\n"
+ "(?: # We\\'ll use this to make keys optional\n"
+ "(?P<keys> # named group: keys\n"
+ "\\d+ # match digits\n"
+ "| # or\n"
+ "\"(?(?=\\\\\\\\\")..|[^\"])*\" # match string between \"\", works even 4 escaped ones \"hello \\\" world\"\n"
+ "| # or\n"
+ "\\'(?(?=\\\\\\\\\\')..|[^\\'])*\\' # match string between \\'\\', same as above :p\n"
+ "| # or\n"
+ "\\$\\w+(?:\\[(?:[^[\\]]|(?R))*\\])* # match variables $_POST, $var, $var[\"foo\"], $var[\"foo\"][\"bar\"], $foo[$bar[\"fail\"]]\n"
+ ") # close group: keys\n"
+ "########################## KEYS END ##########################\n"
+ "\\s* # white spaces\n"
+ "=> # match =>\n"
+ ")? # make keys optional\n"
+ "\\s* # white spaces\n"
+ "########################## VALUES START ##########################\n"
+ "(?P<values> # named group: values\n"
+ "\\d+ # match digits\n"
+ "| # or\n"
+ "\"(?(?=\\\\\\\\\")..|[^\"])*\" # match string between \"\", works even 4 escaped ones \"hello \\\" world\"\n"
+ "| # or\n"
+ "\\'(?(?=\\\\\\\\\\')..|[^\\'])*\\' # match string between \\'\\', same as above :p\n"
+ "| # or\n"
+ "\\$\\w+(?:\\[(?:[^[\\]]|(?R))*\\])* # match variables $_POST, $var, $var[\"foo\"], $var[\"foo\"][\"bar\"], $foo[$bar[\"fail\"]]\n"
+ "| # or\n"
+ "array\\s*\\((?:[^()]|(?R))*\\) # match an array()\n"
+ "| # or\n"
+ "\\[(?:[^[\\]]|(?R))*\\] # match an array, new PHP array syntax: [1, 3, 5] is the same as array(1,3,5)\n"
+ "| # or\n"
+ "(?:function\\s+)?\\w+\\s* # match functions: helloWorld, function name\n"
+ "(?:\\((?:[^()]|(?R))*\\)) # match function parameters (wut), (), (array(1,2,4))\n"
+ "(?:(?:\\s*use\\s*\\((?:[^()]|(?R))*\\)\\s*)? # match use(&$var), use($foo, $bar) (optionally)\n"
+ "\\{(?:[^\\{\\}]|(?R))*\\} # match \\{ whatever\\}\n"
+ ")?;? # match ; (optionally)\n"
+ ") # close group: values\n"
+ "########################## VALUES END ##########################\n"
+ "\\s* # white spaces";
final String string = "0 => \"a\", 123 => 123, 1234, 'got problem ?', \n"
+ " \"a\" => $GlobalScopeVar, \n"
+ "$test_further => function test($noway){echo \"this works too !!!\";}, \n"
+ "\"yellow\" => \"blue\",\n"
+ " \"b\" => array(\"nested\"=>array(1,2,3), \"nested\"=>array(1,2,3),\"nested\"=>array(1,2,3)), \n"
+ "\"c\" => function() use (&$VAR) { return isset($VAR) ? \"defined\" : \"undefined\" ; },\n"
+ " \"bug\",$var = $_POST[\"test];\n"
+ " \"fixed\", \n"
+ "\"mwahahahaa\" => \"Yeaaaah\",\n"
+ "$_POST[\"hello\"][\\'world\\'] => array(\"is\", \"actually\", \"An array !\")";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | Pattern.DOTALL | 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