import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegexUtils
{
private static final Pattern resourceURLCSS = Pattern.compile("url\\((['\"])((?:(?!://|\\1).)*)\\1\\)");
private static final Pattern resourceURLHTML = Pattern.compile("(href|src|url)=(['\"])((?:(?!://|\\2).)*)\\2");
{
Matcher matcher = resourceURLCSS.matcher(input);
return matcher.replaceAll("url('"+baseURL+"$2')");
}
{
Matcher matcher = resourceURLHTML.matcher(input);
return matcher.replaceAll("$1=\""+baseURL+"$3\"");
}
public static void main
(String[] args
) {
String fixed
= RegexUtils.
makeCSSURLsAbsolute("div#header { background-image: url('images/header-background.jpg'); } div#header { background-image: url('images/header-background.jpg'); }",
"http://w...content-available-to-author-only...e.ca/");
fixed = RegexUtils.makeHTMLURLsAbsolute("href=\"wtfguys.css\" href=\"wtfguys.css\"", "http://w...content-available-to-author-only...e.ca/");
}
}
aW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiAKY2xhc3MgUmVnZXhVdGlscwp7Cglwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIHJlc291cmNlVVJMQ1NTCQk9IFBhdHRlcm4uY29tcGlsZSgidXJsXFwoKFsnXCJdKSgoPzooPyE6Ly98XFwxKS4pKilcXDFcXCkiKTsKCXByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gcmVzb3VyY2VVUkxIVE1MCT0gUGF0dGVybi5jb21waWxlKCIoaHJlZnxzcmN8dXJsKT0oWydcIl0pKCg/Oig/ITovL3xcXDIpLikqKVxcMiIpOwogCglwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlQ1NTVVJMc0Fic29sdXRlKFN0cmluZyBpbnB1dCwgU3RyaW5nIGJhc2VVUkwpCgl7CgkJTWF0Y2hlciBtYXRjaGVyCQk9IHJlc291cmNlVVJMQ1NTLm1hdGNoZXIoaW5wdXQpOwoJCXJldHVybiBtYXRjaGVyLnJlcGxhY2VBbGwoInVybCgnIitiYXNlVVJMKyIkMicpIik7Cgl9CglwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlSFRNTFVSTHNBYnNvbHV0ZShTdHJpbmcgaW5wdXQsIFN0cmluZyBiYXNlVVJMKQoJewoJCU1hdGNoZXIgbWF0Y2hlcgkJPSByZXNvdXJjZVVSTEhUTUwubWF0Y2hlcihpbnB1dCk7CgkJcmV0dXJuIG1hdGNoZXIucmVwbGFjZUFsbCgiJDE9XCIiK2Jhc2VVUkwrIiQzXCIiKTsKCX0KIAoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKCXsKCQlTdHJpbmcgZml4ZWQJPSBSZWdleFV0aWxzLm1ha2VDU1NVUkxzQWJzb2x1dGUoImRpdiNoZWFkZXIgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2ltYWdlcy9oZWFkZXItYmFja2dyb3VuZC5qcGcnKTsgfSBkaXYjaGVhZGVyIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdpbWFnZXMvaGVhZGVyLWJhY2tncm91bmQuanBnJyk7IH0iLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY2EvIik7CgkJU3lzdGVtLm91dC5wcmludGxuKGZpeGVkKTsKIAoJCWZpeGVkCQkJPSBSZWdleFV0aWxzLm1ha2VIVE1MVVJMc0Fic29sdXRlKCJocmVmPVwid3RmZ3V5cy5jc3NcIiBocmVmPVwid3RmZ3V5cy5jc3NcIiIsICJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jYS8iKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oZml4ZWQpOwoJfQp9