URL正则表达式匹配是否包含查询字符串

时间:2020-08-03 16:58:25

标签: java regex

我需要一个能在以下提到的条件下匹配以下字符串的正则表达式

https://example.com/jobs/2273/software-engineer/job?mobile=true&width=760

Ans: True

https://example.com/jobs/2273/software-engineer/job

Ans:True

https://example.com/jobs/2273/software-engineer/job?mobile=true

Ans: False (should contain both key values as in #1

简而言之,如果正则表达式如果以#2结尾到job,则它应与url匹配,否则,如果它包含一些参数,则它必须包含mobile=truewidth,并且都必须存在并且接受其他参数。

3 个答案:

答案 0 :(得分:1)

您不需要正则表达式。使用类java.net.URL中的方法,即getPath()getQuery()

根据您的问题,方法getPath()返回的字符串应以 job 结尾,方法getQuery()应该返回null或同时包含 mobile = width =

/* import java.net.URL */
URL url = new URL("whatever"); // replace 'whatever' with your actual URL
String path = url.getPath();
if (path.endsWith("job")) {
    String query = url.getQuery();
    if (query == null || (query.contains("mobile=") && query.contains("width=")) {
        // valid
    }
}

答案 1 :(得分:1)

使用正则表达式(?:.*\/job\?(mobile=(?:true|false)&width=\d+))|(?:.*\/job\?(width=\d+&mobile=(?:true|false)))|.*job(?!.)

检查this以获得快速的演示和说明。

使用Java代码演示:

public class Main {
    public static void main(String[] args) {
        // Test URL strings
        String[] urls = { "https://example.com/jobs/2273/software-engineer/job?mobile=true&width=760",
                "https://example.com/jobs/2273/software-engineer/job?mobile=false&width=760",
                "https://example.com/jobs/2273/software-engineer/job?width=760&mobile=true",
                "https://example.com/jobs/2273/software-engineer/job?width=760&mobile=false",
                "https://example.com/jobs/2273/software-engineer/job",
                "https://example.com/jobs/2273/software-engineer/job?mobile=true" };

        String regex = "(?:.*\\/job\\?(mobile=(?:true|false)&width=\\d+))|(?:.*\\/job\\?(width=\\d+&mobile=(?:true|false)))|.*job(?!.)";

        for (String s : urls) {
            System.out.println(s + " => " + s.matches(regex));
        }
    }
}

输出:

https://example.com/jobs/2273/software-engineer/job?mobile=true&width=760 => true
https://example.com/jobs/2273/software-engineer/job?mobile=false&width=760 => true
https://example.com/jobs/2273/software-engineer/job?width=760&mobile=true => true
https://example.com/jobs/2273/software-engineer/job?width=760&mobile=false => true
https://example.com/jobs/2273/software-engineer/job => true
https://example.com/jobs/2273/software-engineer/job?mobile=true => false

答案 2 :(得分:0)

尝试此正则表达式:

.+\/job\b(\?mobile=true\&width=\d+)?$

请检查demo

在Java中,必须这样写:

String regex = ".+\\/job\\b(\\?mobile=true\\&width=\\d+)?$";