String ReplaceAll方法不起作用

时间:2011-11-29 20:34:55

标签: java regex

我正在使用此方法解析某些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;
}

然而,HTML中没有替换URL。正则表达式似乎与其他正则表达式测试器中的URL匹配。发生了什么事?

1 个答案:

答案 0 :(得分:9)

^锚意味着正则表达式只能在字符串的开头匹配。尝试删除它。

此外,您的意思是$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;
}