掌握正则表达式:从入门到精通的实战指南

news2025/1/10 6:56:52

在这里插入图片描述

文章目录

    • 🌍一.正则表达式
      • ❄️1.为什么学习正则表达式
      • ❄️ 2.基本介绍
      • ❄️3.分析底层实现
    • 🌍二.正则表达式的语法
      • ❄️1.字符匹配
      • ❄️2.量词
      • ❄️3.定位符
      • 4.分组和引用
      • ❄️6.非贪婪匹配
      • ❄️7.分支结构
      • ❄️实际应用
    • 🌍 三.正则标表达式的三个常用类
      • ❄️1. Pattern类
      • ❄️2.Matcher类
      • ❄️3.PatternSyntaxException
    • 🌍 四.分组,捕获,反向引用
      • ❄️提出问题
      • ❄️了解正则表达式的几个概念
      • ❄️经典的结巴程序
    • 🌍五.String类中使用正则表达式
      • ❄️1.替换功能
      • ❄️2.判断功能
      • ❄️3.分割功能
      • ❄️4.演示代码
    • 🌍六.Java正则表达式大全
      • ❄️一、校验数字的表达式
      • ❄️二、校验字符的表达式
      • ❄️三、特殊需求表达式
    • 🌍七.题目练习
      • ❄️第一题
      • ❄️第二题
      • ❄️第三题


🙋‍♂️ 作者:@whisperrr.🙋‍♂️

🎉 其他专栏:零基础学Mysql 🎉

💥 标题:掌握正则表达式:从入门到精通的实战指南💥

❣️ 寄语:比较是偷走幸福的小偷❣️

🌍一.正则表达式

❄️1.为什么学习正则表达式

我们先来看几个问题。

  • 给你一个字符串(或文章),请你找出所有四个数字连在一起的子串?
  • 给你一个字符串(或文章),请你找出所有四个数字连在一起的子串,并且这四个数字要满足:第一位与第四位相同,第二位与第三位相同,比如1221,5775
  • 请验证输入的邮件,是否符合电子邮件格式.
  • 请验证输入的手机号,是否符合手机号格式

解决之道,就在其中-----正则表达式。

❄️ 2.基本介绍

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。正则表达式用于执行字符串的搜索和/或替换操作,常用于数据验证、数据抓取、数据整理等场景。
简单的说:正则表达式是对字符串执行模式匹配的技术。

❄️3.分析底层实现

  1. matcher.find()

matcher.find()完成的任务

  1. 根据指定的规则,定位满足规则的子字符串(比如1234)
  2. 找到后,将 子字符串的索引位置记录到matcher对象的属性int [] groups;
  3. groups[0] = 0, 把该 子字符串的结束索引 + 1 记录到groups[1] = 4;
  4. 同时记录oldlast 的值为 子字符串的结束索引 + 1即为4;
  1. matcher.group(0)
   public String group(int group) {
        if (first < 0)
            throw new IllegalStateException("No match found");
        if (group < 0 || group > groupCount())
            throw new IndexOutOfBoundsException("No group " + group);
        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
            return null;
        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
    }
        小结
        1.如果正则表达式有()分组
        2.group(0)代表匹配的子字符串
        2.group(1)代表匹配的子字符串的第一组
        2.group(2)代表匹配的子字符串的第二组

在这里插入图片描述

🌍二.正则表达式的语法

正则表达式(Regular Expression)是一种强大的文本处理工具,它通过定义一种规则来对字符串进行模式匹配、搜索和替换。下面我会详细讲解正则表达式的各个方面。

❄️1.字符匹配

  • .:匹配除换行符之外的任意单个字符。
  • [abc]:匹配方括号内的任意一个字符(a、b 或 c)。
  • [^abc]:匹配不在方括号内的任意一个字符。
  • [a-z]:匹配从 a 到 z 的任意一个小写字母。
  • [A-Z]:匹配从 A 到 Z 的任意一个大写字母。
  • [0-9]:匹配从 0 到 9 的任意一个数字。
  • \d:匹配一个数字字符。等价于 [0-9]
  • \D:匹配一个非数字字符。等价于 [^0-9]
  • \w:匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]
  • \W:匹配任何非单词字符。等价于 [^A-Za-z0-9_]
  • \s:匹配任何空白字符,包括空格、制表符、换行符等等。
  • \S:匹配任何非空白字符。

❄️2.量词

  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:n 是一个非负整数,匹配确定的 n 次。
  • {n,}:至少匹配 n 次。
  • {n,m}:至少匹配 n 次且最多匹配 m 次。

❄️3.定位符

  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配一个单词边界,即字与空格间的位置。
  • \B:匹配非单词边界。

4.分组和引用

  • (exp):匹配 exp 并捕获文本到自动命名的组里。
  • (?:exp):匹配 exp 但不捕获匹配的文本。
  • \n:引用编号为 n 的捕获组匹配的文本。

❄️6.非贪婪匹配

默认情况下,量词都是贪婪的,会尽可能多地匹配字符。在量词后面加上 ? 可以使其变为非贪婪的,即尽可能少地匹配字符。

  • *?:非贪婪地匹配任意次。
  • +?:非贪婪地匹配一次或多次。
  • ??:非贪婪地匹配零次或一次。
  • {n,m}?:非贪婪地至少匹配 n 次且最多匹配 m 次。

❄️7.分支结构

可以使用 | 来表示分支结构,匹配符号左边的子表达式或右边的子表达式。

  • foo|bar:匹配 “foo” 或 “bar”。

❄️实际应用

在不同的编程语言中,正则表达式的语法和功能可能会有所不同,但基本概念是通用的。以下是一些使用正则表达式的例子:

package com.lrx.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author 刘
 * @version 1.0
 */
public class RegExp08 {
    public static void main(String[] args) {

        String content = "https://www.bilibili.com/video/BV1oDU4YYEgT/?spm_id_from=333.1007.tianma.4-4-14.click";
        String regStr = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+([\\w-#%&?.=/]*)?$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);	
        //第一种验证方法
        while(matcher.find()) {
            System.out.println(matcher.group(0));
        }
        if(matcher.find()) {
            System.out.println("找到");
        }else {
            System.out.println("没有");
        }
        //第二种验证方法
        boolean matches = Pattern.matches(regStr, content);
        System.out.println(matches);
    }
 }

🌍 三.正则标表达式的三个常用类

java.util.regex包主要包括以下三个类Pattern类、Matcher类和PatternSyntaxException

❄️1. Pattern类

pattern对象是一个正则表达式对象。Pattern类没有公共构造方法。要创建一个Pattern对象,调用其公共静态方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数,比如:Pattern r=Pattern.compile(pattern);

  • Pattern类的方法matcher,应用于整体匹配,匹配一部分是错误,验证某一个字符串是否匹配某种规则
    看一下matcher底层实现
public static boolean matches(String regex, CharSequence input) {
                Pattern p = Pattern.compile(regex);
                 Matcher m = p.matcher(input);
                return m.matches();
            }

❄️2.Matcher类

Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象

  • matcher.matches()整体匹配规则,常用于去校验某个字符串是否满足某个规则
  • matcher.replaceAll(“张”)完成替换方法,注意,不是在原字符串上面替换,而是返回一个替换后的字符串

❄️3.PatternSyntaxException

PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

🌍 四.分组,捕获,反向引用

❄️提出问题

给你一段文本,请你找出所有四个数字连在一起的子串,并且这四个数字要满足①第1位与第4位相同②第2位与第3位相同,比如1221,5775,…

❄️了解正则表达式的几个概念

  1. 分组我们可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看作是一个子表达式/一个分组。
  2. 捕获把正则表达式中子表达式/分组匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。组0代表的是整个正则式
  3. 反向引用圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个我们称为反向引用,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部,内部反向引用 \\分组号,外部反向引用 $ 分组号

上面的问题这里不过多叙述,看下面一个经典的结巴程序

❄️经典的结巴程序

问题:
把 类似 : “我…我要…学学学学…编程 java!”;通过正则表达式 修改成 “我要学编程 java”

package com.lrx.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 刘
 * @version 1.0
 */
public class RegExp09 {
    public static void main(String[] args) {
        String content = "我...我要...学学学....编程Java";

        //1.去掉.
        String regStr = "\\.";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        content = matcher.replaceAll("");
        System.out.println(content);

        //2.去掉重复的字
//        regStr = "(.)\\1+";
//        pattern = Pattern.compile(regStr);
//        matcher = pattern.matcher(content);
//        content = matcher.replaceAll("$1");
//        System.out.println(content);

        //3.也可以使用一句语句
        content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
        System.out.println(content);

    }
 }

🌍五.String类中使用正则表达式

❄️1.替换功能

String 类 public String replaceAll(String regex,String replacement)
底层代码:

public String replaceAll(String regex, String replacement) {
        return Pattern.compile(regex).matcher(this).replaceAll(replacement);
    }

❄️2.判断功能

String 类 public boolean matches(String regex){} //使用 Pattern 和 Matcher 类
底层代码:

 public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

❄️3.分割功能

String 类 public String[] split(String regex)
底层代码:

  public String[] split(String regex) {
        return split(regex, 0);
    }

❄️4.演示代码

  1. 使用正则表达式方式,将 JDK1.3 和 JDK1.4 替换成 JDK
  2. 要求 验证一个 手机号, 要求必须是以 138 139 开头的
  3. 要求按照 # 或者 - 或者 ~ 或者 数字 来分割
public class StringReg {
    public static void main(String[] args) {
        String content = "2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布," +
                "几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日," +
                "J2EE1.3发布。2002年2月26日,J2SE1.4发布。";
       
        content = content.replaceAll("JDK1\\.3|JDK1\\.4","JDK");
        System.out.println(content);

        content = "13812341234";
        boolean matches = content.matches("(1(38|39))\\d{8}");
        System.out.println(matches);


        content = "je#jjj-oo~999aaa";
        String[] split = content.split("#|-|~|\\d+");
        for (String s : split) {
            System.out.println(s);
        }

    }
}

🌍六.Java正则表达式大全

❄️一、校验数字的表达式

1 数字:1$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]
)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
8 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
9 有两位小数的正实数:2+(.[0-9]{2})?$
10 有1~3位小数的正实数:3+(.[0-9]{1,3})?$
11 非零的正整数:4\d
$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
12 非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
13 非负整数:^\d+$ 或 5\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(.\d+)?$ 或 6\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$
16 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$
17 正浮点数:7\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
18 负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$

❄️二、校验字符的表达式

1 汉字:8{0,}$
2 英文和数字:9+$ 或 10{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:11+$
5 由26个大写英文字母组成的字符串:12+$
6 由26个小写英文字母组成的字符串:13+$
7 由数字和26个英文字母组成的字符串:14+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:15+$
10 中文、英文、数字但不包括下划线等符号:16+$ 或 17{2,20}$
11 可以输入含有^%&',;=?KaTeX parse error: Expected group after '^' at position 8: \"等字符:[^̲%&',;=?\x22]+
12 禁止输入含有的字符:[^\x22]+

❄️三、特殊需求表达式

1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]
或 ^https://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 电话号码(“XXX-XXXXXXX”、“XXXX-XXXXXXXX”、“XXX-XXXXXXX”、“XXX-XXXXXXXX”、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份证号:
15或18位身份证:^\d{15}|\d{18}$
15位身份证:18\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位身份证:19\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):20[a-zA-Z0-9_]{4,15}$
10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):21\w{5,17}$
11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.
\d)(?=.[a-z])(?=.[A-Z]).{8,10}$
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 钱的输入格式:
16 1.有四种钱的表示形式我们可以接受:“10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:22[0-9]$
17 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]
)$
18 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9])$
19 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:23+(.[0-9]+)?$
20 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 “10” 和 “10.2” 是通过的:24+(.[0-9]{2})?$
21 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:25+(.[0-9]{1,2})?$
22 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:26{1,3}(,[0-9]{3})
(.[0-9]{1,2})?$
23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3}))(.[0-9]{1,2})?$
24 备注:这就是最终结果了,别忘了"+“可以用”
"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
25 xml文件:^([a-zA-Z]±?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
26 中文字符的正则表达式:[\u4e00-\u9fa5]
27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
28 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
29 HTML标记的正则表达式:<(\S*?)[^>]>.?|<.? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
30 首尾空白字符的正则表达式:^\s
|\s*KaTeX parse error: Undefined control sequence: \s at position 4: 或(^\̲s̲*)|(\s*) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
33 IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)

🌍七.题目练习

❄️第一题

验证电子邮件格式是否合法,规定电子邮件规则为

  1. 只能有一个@
  2. @前面是用户名,可以是a-z A-Z0-9_-字符
  3. @后面是域名,并且域名只能是英文字母,比如sohu.com或者tsinghua.org.cn4.写出对应的正则表达式,验证输入的字符串是否为满足规则
public class HomeWork01 {
    public static void main(String[] args) {
        String content = "12aA_@sohZu.cZom";
        boolean matches = content.matches("^[\\w-]+@(([a-zA-Z])+\\.)+[a-zA-Z]+$");
        System.out.println(matches);
    }
}

❄️第二题

要求验证是不是整数或者小数
提示:这个题要考虑正数和负数比如:123-34534.89-87.9-0.010.45等

public class HomeWork02 {
    public static void main(String[] args) {
        String content = "00.1";
        boolean matches = content.matches("^[-+]?([1-9\\d+|0])(\\.\\d+)?$");
        System.out.println(matches);
    }
}

❄️第三题

对一个url进行解析http://www.sohu.com:8080/abc/index.htm
a)要求得到协议是什么?
b)域名是什么?
c)端口是什么?
d)文件名是什么?

public class HomeWork03 {
    public static void main(String[] args) {

        String content = "http://www.sohu.com:8080/abc/index.htm";
        String regStr = "^((http|https)://)?([a-zA-Z.]+):(\\d+)([\\w/]*)/([\\w.]+)$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while(matcher.find()) {
            System.out.println(matcher.group(0));
            System.out.println(matcher.group(1));
            System.out.println(matcher.group(2));
            System.out.println(matcher.group(3));
            System.out.println(matcher.group(4));
            System.out.println(matcher.group(5));
            System.out.println(matcher.group(6));
        }
    }
}

  1. 0-9 ↩︎

  2. 0-9 ↩︎

  3. 0-9 ↩︎

  4. 1-9 ↩︎

  5. 1-9 ↩︎

  6. 1-9 ↩︎

  7. 1-9 ↩︎

  8. \u4e00-\u9fa5 ↩︎

  9. A-Za-z0-9 ↩︎

  10. A-Za-z0-9 ↩︎

  11. A-Za-z ↩︎

  12. A-Z ↩︎

  13. a-z ↩︎

  14. A-Za-z0-9 ↩︎

  15. \u4E00-\u9FA5A-Za-z0-9_ ↩︎

  16. \u4E00-\u9FA5A-Za-z0-9 ↩︎

  17. \u4E00-\u9FA5A-Za-z0-9 ↩︎

  18. 1-9 ↩︎

  19. 1-9 ↩︎

  20. a-zA-Z ↩︎

  21. a-zA-Z ↩︎

  22. 1-9 ↩︎

  23. 0-9 ↩︎

  24. 0-9 ↩︎

  25. 0-9 ↩︎

  26. 0-9 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux&#xff0c;最初学习时是一脸蒙圈&#xff0c;啥也不会&#xff0c;啥也不懂&#xff0c;做了很多乱七八糟&#xff0c;没有条理的笔记。不知…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面&#xff0c;成为Science、Nature论文的…

用 Python 绘制可爱的招财猫

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​ ​​​​​​​​​ ​​​​ 招财猫&#xff0c;也被称为“幸运猫”&#xff0c;是一种象征财富和好运的吉祥物&#xff0c;经常…

【Linux】Linux常见指令(上)

个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统&#xff0c;Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…

AI是IT行业的变革力量,还是“职业终结者”?

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 AI是…

mapbox进阶,卷帘对比

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️mapbox-gl-compare 卷帘对比控件二、�…

【开源免费】基于SpringBoot+Vue.JS企业资产管理系统(JAVA毕业设计)

本文项目编号 T 124 &#xff0c;文末自助获取源码 \color{red}{T124&#xff0c;文末自助获取源码} T124&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

Linux环境中对Postgrel数据库的安装与配置

一、环境准备 linux操作系统的环境是centos7; Postgrel数据库的版本是12.0&#xff0c;不同版本的下载渠道如下&#xff08;PostgreSQL: File Browser&#xff09;&#xff1a; 可以看到压缩包是比较小的&#xff1b;下载之后&#xff0c;上传到你的linux环境中即可。 二、…

《零基础Go语言算法实战》【题目 1-11】格式化字符串

《零基础Go语言算法实战》 【题目 1-11】格式化字符串 在 Go 语言中&#xff0c;找到使用变量格式化字符串而不打印值的简单方法。 【解答】 在 Go 语言中&#xff0c;在不打印值的情况下进行格式化的最简单方法是使用 fmt.Sprintf() 函数&#xff0c; 它返回一个格式化的…

【机器视觉】OpenCV 图像轮廓(查找/绘制轮廓、轮廓面积/周长、多边形逼近与凸包、外接矩形)

OpenCV官网 7. 图像轮廓 7.1 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用: 用于图形分析物体的识别和检测 注意点: 为了检测的准确性&#xff0c;需要先对图像进行二值化或Canny操作。画轮廓时…

Elasticsearch:使用 Playground 与你的 PDF 聊天

LLMs作者&#xff1a;来自 Elastic Toms Mura 了解如何将 PDF 文件上传到 Kibana 并使用 Elastic Playground 与它们交互。本博客展示了在 Playground 中与 PDF 聊天的实用示例。 Elasticsearch 8.16 具有一项新功能&#xff0c;可让你将 PDF 文件直接上传到 Kibana 并使用 Pla…

RabbitMQ 在 Spring Boot 项目中的深度应用与实战解析

RabbitMQ 在 Spring Boot 项目中的深度应用与实战解析 引言 RabbitMQ 作为一款广受欢迎的开源消息队列系统&#xff0c;遵循 AMQP 协议&#xff0c;能够在分布式系统里实现应用程序之间的异步通信、解耦以及流量削峰等关键功能。在 Spring Boot 项目中集成 RabbitMQ&#xff…

简述视觉语言模型(Vision-Language Models, VLMs)

目录 1. 引言 2. 视觉语言模型的基本概念 什么是视觉语言模型 视觉语言模型的工作原理 3. 视觉语言模型的架构 双流神经网络结构 多模态对齐机制 跨模态注意力机制 统一架构&#xff1a;视觉-语言一体化模型 4. 视觉语言模型的关键技术 图像表示学习 文本表示学习 …

分治算法——优选算法

本章我们要学习的是分治算法&#xff0c;顾名思义就是分而治之&#xff0c;把大问题分为多个相同的子问题进行处理&#xff0c;其中我们熟知的快速排序和归并排序用的就是分治算法&#xff0c;所以我们需要重新回顾一下这两个排序。 一、快速排序&#xff08;三路划分&#xf…

迎接2025Power BI日期表创建指南:模板与最佳实践

故事背景 最近&#xff0c;我们收到了一些关于时间表更新的询问。询问的朋友发现&#xff0c;随着2025年的到来&#xff0c;2024年的日期表已不再适用。这是一个在数据分析领域常见的问题&#xff0c;每年都需要对日期表进行更新。 解决方案 鉴于创建和更新日期表是一项年度…

Trilium Notes中文版本地Docker部署与远程访问打造个人云知识库

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

【读书与思考】历史是一个好东西

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 以后《AI日记》专栏我想专注于 AI 相关的学习、成长和工作等。而与 AI 无关的一些读书、思考和闲聊&#xff0c;我打算写到这里&#xff0c;我会尽量控制自己少想和少写。 下图的一些感想…

CSS——26. 伪元素2(“::before ,::after”)

::before伪类 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>伪元素</title><style type"text/css">div::before{content: "我最棒";}}</style></head><body><!--…

在macOS上安装MySQL

macOS的MySQL有多种不同的形式&#xff1a; 1、本机包安装程序&#xff0c;它使用本机macOS安装程序&#xff08;DMG&#xff09;引导您完成MySQL的安装。有关详细信息&#xff0c;请参阅第2.4.2节&#xff0c;“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…