“正则表达式 验证复杂URL”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的4个中间版本) | |||
第124行: | 第124行: | ||
=== 匹配域名后面的路径和参数 === | === 匹配域名后面的路径和参数 === | ||
− | '''<big>注意:当?出现在[]中,它将仅代表字符 ? | + | '''<big>注意:当 ? 出现在[]中,它将仅代表字符 ?,不再代表限定符;当 . 出现在[]中,也将仅代表字符 .,不再匹配所有字符</big>''' |
+ | |||
+ | ==== 示例1:匹配 "<nowiki>https://www.bilibili.com/vide0/BV1fh411y7R8?from=search&seid=1831060912083761326</nowiki>" 满足格式 ==== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | 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("不满足格式"); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | 满足格式 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== 示例2:匹配 "<nowiki>http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU</nowiki>" 不满足格式 ==== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | 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("不满足格式"); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | 不满足格式 | ||
+ | </syntaxhighlight>仔细看,发现在 URL 域名后面的路径和参数中 还有 # 字符(没有在正则表达式中进行配置) | ||
+ | |||
+ | |||
+ | |||
+ | ==== 示例3:匹配 "<nowiki>http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU</nowiki>" 满足格式 ==== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | 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("不满足格式"); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | 满足格式 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ==== 示例4:部分需求是要求 URL 可以没有域名前面的部分 ==== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | 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("不满足格式"); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | 满足格式 | ||
+ | </syntaxhighlight> |
2022年11月19日 (六) 08:29的最新版本
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("不满足格式");
}
}
}
满足格式