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

我想删除包含 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不删除结束网址)


期望的输出是: abc  something


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


编辑:抱歉,前面的示例在 http 之后没有包含实际的 url。


烙印99
浏览 131回答 1
1回答

catspeake

你的正则表达式是https?://.*?\\s+最后一个标记\s+表示一个或多个空格字符。如果要删除不一定以空格结尾的子字符串,则可以用*代替+-*重复前面的标记零次或多次:String x = line.replaceAll("https?://.*?\\s*", " ");也就是说,如果您拥有的 URL 有效并且不包含任何空格字符,则将非空格字符与\S空字符串匹配并替换为空字符串可能更有意义,而不是查找空格字符,匹配它们,然后然后用另一个空格替换:String x = line.replaceAll("https?://\\S*", "");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java