Java regex。用空格和括号匹配URL

问题描述 投票:0回答:1

使用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
java regex url
1个回答
1
投票

看看这段代码。

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个以上的空格,就是两个文件名之间的分隔。

希望对你有所帮助。


0
投票

由 "第四只鸟 "网友提供的答案解决了这个问题,regex应该是。

http.*?\.(?:pdf|jpe?g)
© www.soinside.com 2019 - 2024. All rights reserved.