Java 正则表达式模式不';如果结尾没有空格,则不起作用
我想删除包含http或https的字符串。我有以下代码段:Java 正则表达式模式不';如果结尾没有空格,则不起作用,java,regex,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+", " ");
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某物https://someurl
(不删除结束url)
期望的输出是:abc something
我猜这是对正则表达式的简单更改
编辑:很抱歉,前面的示例在http之后没有包含实际的url。您的正则表达式是
https?://.*?\\s+
最后一个标记\s+
表示一个或多个空格字符。如果要删除不一定以空格结尾的子字符串,可以使用*
而不是+
-*
重复前面的标记零次或多次:
也就是说,如果您拥有的URL有效且不包含任何空格字符,那么将非空格字符与\S
匹配并替换为空字符串可能更有意义,而不是查找空格字符,将其匹配,然后替换为另一个空格:
你的正则表达式是
https?://.*?\\s+
最后一个标记\s+
表示一个或多个空格字符。如果要删除不一定以空格结尾的子字符串,可以使用*
而不是+
-*
重复前面的标记零次或多次:
也就是说,如果您拥有的URL有效且不包含任何空格字符,那么将非空格字符与\S
匹配并替换为空字符串可能更有意义,而不是查找空格字符,将其匹配,然后替换为另一个空格:
很抱歉,我以前的输入在http之后没有实际的URL。我希望删除整个URL。@kami
https?://[^\\s]*\\s*
@TuyenPham使用\s
比[^\s]
@CertainPerformance好得多,是的,我在写我的文章时没有看到你最后的评论,\s
不会在我的大脑中弹出:)对不起,我以前的输入在http之后没有实际的URL。我希望删除整个URL。@kamihttps?://[^\\s]*\\s*
@TuyenPham使用\s
比[^\s]
@CertainPerformance好得多,是的,我在写我的时候没有看到你最后的评论,\s
不会在我的脑海中弹出:)
String x = line.replaceAll("https?://\\S*", "");