正则表达式 验证复杂URL
跳到导航
跳到搜索
https://www.bilibili.com/video/BV1Eq4y1E79W/?p=17
先确定 URL 的开始部分
^((http|https)://)
示例:验证 https://
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "https://";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http://
*/
String regStr = "^((http|https)://)$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式
示例:验证 http://
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "http://";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http://
*/
String regStr = "^((http|https)://)$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式
确定域名的部分
([\w-]+\.)+[\w-]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "https://www.bilibili.com";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http:// ((http|https)://)
* 2、确定域名的部分 ([\w-]+\.)+[\w-]+
*/
String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式
匹配域名后面的路径和参数
注意:当 ? 出现在[]中,它将仅代表字符 ?,不再代表限定符;当 . 出现在[]中,也将仅代表字符 .,不再匹配所有字符
示例1:匹配 "https://www.bilibili.com/vide0/BV1fh411y7R8?from=search&seid=1831060912083761326" 满足格式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "https://www.bilibili.com/vide0/BV1fh411y7R8?from=search&seid=1831060912083761326";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http:// ((http|https)://)
* 2、确定域名的部分 ([\w-]+\.)+[\w-]+
* 3、匹配域名后面的路径和参数 (\\/[\\w-?=&/%.]*)?
*/
String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.]*)?$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式
示例2:匹配 "http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU" 不满足格式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http:// ((http|https)://)
* 2、确定域名的部分 ([\w-]+\.)+[\w-]+
* 3、匹配域名后面的路径和参数 (\\/[\\w-?=&/%.]*)?
*/
String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.]*)?$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
不满足格式
仔细看,发现在 URL 域名后面的路径和参数中 还有 # 字符(没有在正则表达式中进行配置)
示例3:匹配 "http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU" 满足格式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = String content = "http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http:// ((http|https)://)
* 2、确定域名的部分 ([\w-]+\.)+[\w-]+
* 3、匹配域名后面的路径和参数 (\\/[\\w-?=&/%.#]*)?
*/
String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式
示例4:部分需求是要求 URL 可以没有域名前面的部分
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp11 {
public static void main(String[] args) {
String content = "edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU";
/**
* 思路:
* 1、先确定 url 的开始部分 https:// | http:// ((http|https)://)
* 2、确定域名的部分 ([\w-]+\.)+[\w-]+
* 3、匹配域名后面的路径和参数 (\\/[\\w-?=&/%.#]*)?
*/
String regStr = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$"; //注意:[.]表示匹配就是 . 本身
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
System.out.println("满足格式");
} else {
System.out.println("不满足格式");
}
}
}
满足格式