我需要一个能在以下提到的条件下匹配以下字符串的正则表达式
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=true
和width
,并且都必须存在并且接受其他参数。
答案 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+)?$";