Различия в шаблонах regex между JavaScript и Java?

В JavaScript у меня есть следующее:

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}

Он заменяет все URL в строке ввода на версию URL, которая имеет тег якоря, обернутый вокруг него, чтобы превратить его в ссылку. Я пытаюсь продублировать эту функциональность в Java с помощью следующей функции:

private String replaceURLWithHTMLLinks(String text) {
    String pattern = "/(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/i";
    return text.replaceAll(pattern, "<a href=\"$1\">$1</a>");
}

Однако, хотя она отлично работает в JavaScript, она не находит совпадений в Java, даже для той же входной строки. Нужно ли мне изменить что-то в шаблоне, или что происходит?

6
задан Alex Zylman 25 December 2011 в 09:40
поделиться