У меня есть следующий код: http://ideone.com/mFUaqG
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegexUtils
{
private static final Pattern resourceURLCSS = Pattern.compile("url\\([\'\"](((?!://).)*)[\'\"]\\)");
private static final Pattern resourceURLHTML = Pattern.compile("(href|src|url)=[\'\"](((?!://).)*)[\'\"]");
public static String makeCSSURLsAbsolute(String input, String baseURL)
{
Matcher matcher = resourceURLCSS.matcher(input);
return matcher.replaceAll("url('"+baseURL+"$1')");
}
public static String makeHTMLURLsAbsolute(String input, String baseURL)
{
Matcher matcher = resourceURLHTML.matcher(input);
return matcher.replaceAll("$1=\""+baseURL+"$2\"");
}
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://www.google.ca/");
System.out.println(fixed);
fixed = RegexUtils.makeHTMLURLsAbsolute("href=\"wtfguys.css\" href=\"wtfguys.css\"", "http://www.google.ca/");
System.out.println(fixed);
}
}
К сожалению, этот код не делает того, что я ожидал, а именно замены всех вхождений регулярного выражения заменой строки. По сути, мы заменяем относительные URL-адреса в CSS и HTML абсолютными URL-адресами. Кажется, это только заменяет первое вхождение, давая
div#header { background-image: url('http://www.google.ca/images/header-background.jpg'); } div#header { background-image: url('images/header-background.jpg'); }
href="http://www.google.ca/wtfguys.css" href="wtfguys.css"
как вывод. Какие-либо предложения?