Java:使用replaceAll()替换String中的所有URL(URL包含' \')

时间:2015-08-28 08:04:52

标签: java regex replaceall

我正在处理一个包含大约1000万个文件的语料库。某些文件的网址中包含反斜杠(' \')。我想替换那些文件中的所有URL。以下工作正常,直到找到包含反斜杠的URL。

public static String removeUrl(String str)
{
    String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure):((//)|(\\\\))[\\w\\d:#@%/;$~_?\\+-=\\\\\\.&]*)";
    Pattern p = Pattern.compile(urlPattern, Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(str);
    while (str!=null && m.find()) {
        str = str.replaceAll(m.group(0)," ").trim(); // ERROR is occuring here when m.group(0) has URL with '\'
    }
    return str;
}

任何帮助?

2 个答案:

答案 0 :(得分:0)

它与逃避反斜杠有关: removeUrl("http://go.com\\")不会抛出错误,但str.replaceAll("\\\\", "");会错误。您可能必须在替换All之前操纵字符串,例如str.replaceAll("\\", "");

此外,只有str.replace("\\", "");而非openerp.zip_widget = function(instance) { var _t = instance.web._t, _lt = instance.web._lt; var QWeb = instance.web.qweb; var fields; // <-- Variable to keep the field list instance.web.form.widgets.add('zip', 'instance.zip_widget.zip_lookup'); instance.zip_widget.zip_lookup = instance.web.form.FieldChar.extend({ template: "zip_widget", start: function() { this._super(); fields = this.getParent().fields; // <-- Get the field list },

才会引发异常

修改:刚看到this

答案 1 :(得分:0)

这个正则表达式对我有用。

[a-zA-Z]+:\/\/([a-zA-Z0-9\.\-_])+(:[0-9]+)?([\/\\][a-zA-Z0-9\._\-]*)*(\?(&?[a-zA-Z0-9_\-\.]+=[a-zA-Z0-9_\-\.]+)+)?

它匹配所有这些

http://test.test.test:123/test.test/test?blah=23&bluh=23
http://test.test.test/test.test/?blah=blah
http://ttes-test.comsa234/ase/ase
abc://test.test
abc://test.test:900
abc://test.test/
abc://test.test\
abc://test.test\test
abc://test.test:90/test\test/test
abc://wow/test?this=works&and=worksagain
cde://yay/what/yes.com/hi_there\?param=value&param=value
withdash://its-dash/another-dash\okay

您可以使用regex101进行测试