没有空格结束时,正则表达式模式不起作用

时间:2018-10-11 03:25:38

标签: java regex

我想删除包含http或https的字符串。我有以下代码段:

    String line="abc http://someurl something https://someurl";

    if (line.contains("https") || line.contains("http")) {
        System.out.println(line);
        String x = line.replaceAll("https?://.*?\\s+", " ");
        System.out.println(x);
    }

输出为:abc something https://someurl(不删除结尾URL)

所需的输出为:abc something

我猜想它是对正则表达式的简单更改...

编辑:对不起,前面的示例在http之后没有实际的网址。

1 个答案:

答案 0 :(得分:4)

您的正则表达式是

https?://.*?\\s+

最后一个标记\s+表示一个或多个空格字符。如果要删除不一定必须以空格结尾的子字符串,则可以用*而不是+重复-*的意思是重复前面的标记零次或多次

String x = line.replaceAll("https?://.*?\\s*", " ");

也就是说,如果您拥有的网址有效且不包含任何空格字符,则将非空格字符与\S匹配并替换为空字符串(而不是外观)可能更有意义空格字符,将其匹配,然后替换为另一个空格:

String x = line.replaceAll("https?://\\S*", "");