“正则表达式 验证复杂URL”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的2个中间版本)
第166行: 第166行:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==== 示例2:匹配 "<nowiki>http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc</nowiki>" 不满足格式 ====
+
 
 +
 
 +
 
 +
==== 示例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">
 
<syntaxhighlight lang="java">
 
import java.util.regex.Matcher;
 
import java.util.regex.Matcher;
第175行: 第178行:
 
     public static void main(String[] args) {
 
     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=jMc";
+
         String content = "http://edu.3dsmax.tech/yg/bitibiti/my6652/pc/qg/05-51/index.html#201211-1?track_id=jMc0jn-hm-yHrNfVad37YdhOUh41XYmjlss9zocM26gspY5ArwWuxb4wYWpmh2Q7doU0wLkViEhUIO1qNtukyAgake2jG1bTd23IR57XzV83E9bAXWkStcAh4j9Dz7a87ThGIqgdCZ2zpQy33a0SVNMfmJLSNnDzJ71TU68Rc-3PKE7VA3kYzjk4RrKU";
  
 
         /**
 
         /**
第205行: 第208行:
 
不满足格式
 
不满足格式
 
</syntaxhighlight>仔细看,发现在 URL 域名后面的路径和参数中 还有 # 字符(没有在正则表达式中进行配置)
 
</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("不满足格式");

        }

    }

}
满足格式