Метод String ReplaceAll не работает - PullRequest
5 голосов
/ 30 ноября 2011

Я использую этот метод для анализа простых текстовых URL в некоторых HTML и превращения их в ссылки

private String fixLinks(String body) {
    String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
    body = body.replaceAll(regex, "<a href=\"$1\">$1</a>");
    Log.d(TAG, body);
    return body;
}

Однако URL-адреса в HTML не заменяются. Регулярное выражение, кажется, соответствует URL в других тестерах регулярных выражений. Что происходит?

1 Ответ

9 голосов
/ 30 ноября 2011

Якорь ^ означает, что регулярное выражение может совпадать только в начале строки.Попробуйте удалить его.

Кроме того, похоже, что вы имеете в виду $0, а не $1, поскольку вы хотите получить весь матч, а не первую группу захвата, а именно (https?|ftp|file).

Подводя итог, у меня работает следующее:

private String fixLinks(String body) {
    String regex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
    body = body.replaceAll(regex, "<a href=\"$0\">$0</a>");
    Log.d(TAG, body);
    return body;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...