使用Java Regex,我无法匹配有空格、(和)括号的URL,以下是一个代码示例,请你帮忙。只有最后一个URL E.jpeg
作品。
编码:
public static void main(String[] args) {
String content = "Lorem ipsum https://example.com/A B 123 4.pdf https://example.com/(C.jpeg https://example.com/D).jpeg https://example.com/E.jpeg";
extractUrls(content);
}
public static void extractUrls(String text) {
Pattern pat = Pattern.compile("(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]", Pattern.CASE_INSENSITIVE);
Matcher matcher = pat.matcher(text);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
产出:
https://example.com/A
https://example.com/
https://example.com/D
https://example.com/E.jpeg
预期的输出。
https://example.com/A B 123 4.pdf
https://example.com/(C.jpeg
https://example.com/D).jpeg
https://example.com/E.jpeg
看看这段代码。
import java.lang.Math;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MyClass {
public static void main(String[] args) {
String content = "Lorem ipsum https://example.com/A B 123 4.pdf https://example.com/(C.jpeg https://example.com/D).jpeg https://example.com/E.jpeg";
extractUrls(content);
}
public static void extractUrls(String text) {
Pattern pat = Pattern.compile("(https?)://(([\\S]+)(\\s)?)*", Pattern.CASE_INSENSITIVE);
Matcher matcher = pat.matcher(text);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
https://example.com/A B 123 4.pdf
https://example.com/(C.jpeg
https://example.com/D).jpeg
https://example.com/E.jpeg
解释一下
我假设文件名没有两个连续的空格,如例子所示。
解释:我假设文件名中没有连续的两个空格,如示例所示。(https?)://
识别子串 http://
或 https://
.
我们这块有两组。(([\\S]+)(\\s)?
. 它识别的是1个或多个字符(除空格外),后面只有1个或0个空白字符。
随着字符 *
这个过程可以重复多次。
因此我们的表达式理解为,如果有2个或2个以上的空格,就是两个文件名之间的分隔。
希望对你有所帮助。
由 "第四只鸟 "网友提供的答案解决了这个问题,regex应该是。
http.*?\.(?:pdf|jpe?g)