import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?:\n"
+ " <\\?php\n"
+ " (?:\n"
+ " [^\"'\\/<\\?]+\n"
+ " |\n"
+ " (?:\n"
+ " \"(?:[^\\\\\"]|\\\\[\\s\\S])*\"\n"
+ " |\n"
+ " # '(?:[^\\\\']|\\\\[\\s\\S])*'\n"
+ " #|\n"
+ " \\/\\*(?:[^\\*]|\\*[^\\/])*\\*\\/ \n"
+ " |\n"
+ " (?:\\#|\\/\\/).+(?:\\n|$)\n"
+ " |\n"
+ " (?:\n"
+ " <<<\\s*\n"
+ " (?:\n"
+ " (?:'([a-zA-Z0-9_]+)'\\s*?\\n)(?:[^\\n]*\\n)*?\\s*\\1\\s*?;?\\s*?(?:\\n|$)\n"
+ " |\n"
+ " (?:([a-zA-Z0-9_]+)\\s*?\\n)(?:[^\\n]*\\n)*?\\s*\\2\\s*?;?\\s*?(?:\\n|$)\n"
+ " )\n"
+ " )\n"
+ " )\n"
+ " |\n"
+ " (?:[^?]|\\?[^>])\n"
+ " )*\n"
+ " (?:\\?>|$)\n"
+ ")";
final String string = "<!--\n"
+ " The PHP masterpage\n"
+ "-->\n"
+ "<?php\n"
+ "$matches = array();\n"
+ "// separates \n"
+ "$re = <<<PREG\n"
+ " /^\n"
+ " \n"
+ " (?:\\\\s*(?:<!--.*?-->))*\n"
+ " <\\\\?php\\\\s*include\\\\s*(\\\\()?\\\\s*([\\\\'\\\\\"])(?:(?!\\\\2).)*(?-i)Master\\\\.php(?i)\\\\2(?(-2)\\\\))\\\\s*;\\\\s*\\\\?>\\\\s*\n"
+ " (?:\\\\s*(?:<!--.*?-->))*\n"
+ " <master\\\\s*src=([\\\\'\\\\\\\"])(?<master_url>.+?)\\\\3\\\\/>(?<content>[\\s\\S]*)\n"
+ " $\n"
+ " /ix\n"
+ "PREG;\n\n\n"
+ "$re = <<<PREG2\n"
+ " /^\n"
+ " \n"
+ " (?:\\\\s*(?:<!--.*?-->))*\n"
+ " <\\\\?php\\\\s*include\\\\s*(\\\\()?\\\\s*([\\\\'\\\\\"])(?:(?!\\\\2).)*(?-i)Master\\\\.php(?i)\\\\2(?(-2)\\\\))\\\\s*;\\\\s*\\\\?>\\\\s*\n"
+ " (?:\\\\s*(?:<!--.*?-->))*\n"
+ " <master\\\\s*src=([\\\\'\\\\\\\"])(?<master_url>.+?)\\\\3\\\\/>(?<content>[\\s\\S]*)\n"
+ " $\n"
+ " /ix\n"
+ "PREG2;\n\n"
+ "$raw = file_get_contents(filter_input(INPUT_SERVER, 'SCRIPT_FILENAME'));\n"
+ "preg_match($re, $raw, $matches);\n\n"
+ "$master = file_get_contents($matches[\"master_url\"]);\n"
+ "$child = $matches[\"content\"];\n\n"
+ "$child_txt = eval2str($child);\n\n"
+ "$master_txt = eval2str($master);\n\n"
+ "$placeholder_xml = new DOMDocument();\n"
+ "@$placeholder_xml->loadHTML($master_txt, LIBXML_NOWARNING);\n\n"
+ "$child_xml = new DOMDocument();\n"
+ "@$child_xml->loadHTML($child_txt, LIBXML_NOWARNING);\n\n"
+ "$child_elems = $child_xml->getElementsByTagName(\"content\");\n\n\n"
+ "foreach($child_elems as $c)\n"
+ "{\n"
+ " $name = $c->getAttribute(\"name\");\n"
+ " $child_map[$name] = $placeholder_xml->importNode($c, true);\n"
+ "}\n\n"
+ "$placeholder_elems = $placeholder_xml->getElementsByTagName(\"placeholder\");\n"
+ "while($placeholder_elems->length > 0)\n"
+ "{\n"
+ " $oldnode = $placeholder_elems->item(0);\n"
+ " $name = $oldnode->getAttribute(\"name\");\n"
+ " \n"
+ " if(!isset($child_map[$name]))\n"
+ " {\n"
+ " $newnode = $placeholder_xml->createElement(\"content\");\n"
+ " $attr = $placeholder_xml->createAttribute(\"name\");\n"
+ " $attr->value = $name;\n"
+ " $newnode->appendChild($attr);\n"
+ " $child_map[$name] = $newnode;\n"
+ " }\n"
+ " $newnode = $child_map[$name];\n"
+ " \n"
+ " $parent = $oldnode->parentNode;\n"
+ " \n"
+ " $parent->replaceChild($newnode, $oldnode);\n"
+ " $placeholder_elems = $placeholder_xml->getElementsByTagName(\"placeholder\"); // \n"
+ "}\n\n"
+ "die($placeholder_xml->saveHTML()); // to end execution of the remaining code in the calling file\n"
+ "/*\n\n"
+ "*/\n"
+ "function eval2str($code)\n"
+ "{\n"
+ " ob_start();\n"
+ " eval(\"?>$code\");\n"
+ " return ob_get_clean();\n"
+ "}\n"
+ "?>";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | Pattern.CASE_INSENSITIVE);
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