当前位置: 首页 > news >正文

正则入门到精通


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ee791b6fb74b4f649bdba48efea7c7ee.png

一、正则表达式入门​

正则表达式本质上是一串字符序列,用于定义一个文本模式。通过这个模式,我们可以指定要匹配的文本特征。例如,如果你想匹配一个以 “abc” 开头的字符串,正则表达式可以写作 “^abc”,其中 “^” 表示匹配字符串的开头。​

(一)基本字符匹配​

在正则表达式中,普通字符(如字母、数字)通常表示它们自身。例如,正则表达式 “abc” 可以匹配文本中的 “abc” 序列。如果文本是 “abcdef”,那么 “abc” 会匹配成功;但如果文本是 “defabc”,那么匹配失败,因为正则表达式是从左到右进行匹配的。​

案例(JavaScript):​

const text1 = "abcdef";const regex1 = /abc/;​console.log(regex1.test(text1)); // 输出: true​const text2 = "defabc";const regex2 = /abc/;​console.log(regex2.test(text2)); // 输出: false​

在上述代码中,/abc/是一个正则表达式字面量,test方法用于测试给定的字符串是否包含匹配正则表达式的文本。​

(二)特殊字符​

正则表达式中有一些特殊字符,它们具有特殊的含义。例如:​

“.”(点号):匹配任意单个字符(除了换行符)。例如,“a.c” 可以匹配 “abc”、“adc” 等,但不能匹配 “ac”。​
”(星号):表示前面的字符可以出现零次或多次。例如,“abc” 可以匹配 “ac”、“abc”、“abbc” 等。​
“+”(加号):表示前面的字符至少出现一次。例如,“ab+c” 可以匹配 “abc”、“abbc” 等,但不能匹配 “ac”。​
“?”(问号):表示前面的字符可以出现零次或一次。例如,“ab?c” 可以匹配 “ac” 和 “abc”。​
”(脱字符):用于匹配字符串的开头。例如,“abc” 表示匹配以 “abc” 开头的字符串。​
“​

” 表示匹配以 “abc” 结尾的字符串。​

// “.”的案例​const text3 = "a1c a2c a c";const regex3 = /a.c/;​console.log(text3.match(regex3)); // 输出: ["a1c"],注意:match方法默认只返回第一个匹配结果​// “*”的案例​const text4 = "ac abc abbc abbbc";const regex4 = /ab*c/;​console.log(text4.match(regex4)); // 输出: ["abbbc"]​// “+”的案例​const text5 = "abc abbc abbbc";const regex5 = /ab+c/;​console.log(text5.match(regex5)); // 输出: ["abbbc"]​// “?”的案例​const text6 = "ac abc";const regex6 = /ab?c/;​console.log(text6.match(regex6)); // 输出: ["abc"]​// “^”的案例​const text7 = ["abcdef", "defabc", "abc"];const regex7 = /^abc/;​text7.forEach(str => {​console.log(regex7.test(str));// 输出: true, false, true​});​​// “$”的案例​const text8 = ["abc", "defabc", "abcd"];const regex8 = /abc$/;​text8.forEach(str => {​console.log(regex8.test(str));// 输出: true, true, false​});

在这些案例中,match方法用于在字符串中查找所有匹配正则表达式的子字符串,并返回一个数组。如果没有找到匹配项,则返回null。test方法则用于判断字符串是否与正则表达式匹配,返回true或false。​

(三)字符集​

字符集用于匹配一组特定的字符。例如,“[abc]” 可以匹配 “a”、“b” 或 “c”。字符集还可以使用范围表示法,如 “[a-z]” 表示匹配任意一个小写字母,“[0-9]” 表示匹配任意一个数字。​

// 匹配元音字母​const text9 = "apple banana cherry";const regex9 = /[aeiou]/g;​console.log(text9.match(regex9));// 输出: ["a", "e", "a", "a", "e"],这里的“g”标志表示全局匹配,即找到所有匹配项​// 匹配数字​const text10 = "123abcABC";const regex10 = /[0-9]/g;​console.log(text10.match(regex10)); // 输出: ["1", "2", "3"]​// 匹配字母​const text11 = "123abcABC";const regex11 = /[a-zA-Z]/g;​console.log(text11.match(regex11)); // 输出: ["a", "b", "c", "A", "B", "C"]​

在上述代码中,正则表达式中的 “g” 标志是非常重要的,它使得match方法能够返回所有匹配的结果,而不仅仅是第一个。​

(四)分组​

分组是通过圆括号 “()” 来实现的。它可以将多个字符组合在一起,作为一个整体进行匹配。例如,“(abc)+” 表示匹配一个或多个 “abc” 序列。​

const text12 = "abcabcabc abcab ab";const regex12 = /(abc)+/g;​console.log(text12.match(regex12));// 输出: ["abcabcabc", "abcab"]​

在这个例子中,通过分组我们能够准确匹配由一个或多个 “abc” 序列组成的子字符串。​

二、正则表达式的进阶应用​

(一)匹配特定格式的文本​

正则表达式可以用来匹配各种特定格式的文本,如日期、电话号码、电子邮件地址等。例如,一个简单的电子邮件地址匹配正则表达式可以写作 “[a-zA-Z0-9_.±]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+”。这个表达式通过字符集和分组的方式,确保了电子邮件地址的基本格式。​

// 日期匹配​const text13 = "今天是2023-10-15,明天是2023-10-16";const regex13 = /\d{4}-\d{2}-\d{2}/g;​console.log(text13.match(regex13));// 输出: ["2023-10-15", "2023-10-16"]​// 电话号码匹配​const text14 = "联系电话:13800138000";const regex14 = /1\d{10}/;​console.log(text14.match(regex14)); // 输出: ["13800138000"]​// 电子邮件地址匹配​const text15 = "我的邮箱是example@example.com,另一个是test_123@test-company.co.uk";const regex15 = /[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+/g;​console.log(text15.match(regex15));// 输出: ["example@example.com", "test_123@test-company.co.uk"]​

这些案例展示了如何使用正则表达式在 JavaScript 中准确匹配常见的特定格式文本。​

(二)捕获与替换​

正则表达式不仅可以用于匹配文本,还可以用于捕获和替换文本。通过分组和捕获功能,我们可以提取文本中的特定部分,并进行替换操作。例如,在文本编辑器中,我们可以使用正则表达式查找所有以 “http://” 开头的链接,并将其替换为 “https://”。​

// 捕获域名部分并替换链接协议​const text16 = "请访问链接:http://example.com和http://test.com";const regex16 = /http://([a-zA-Z0-9-.]+)/g;const newText16 = text16.replace(regex16, "https://$1");​console.log(newText16);// 输出: 请访问链接:https://example.com和https://test.com​// 提取价格部分​const text17 = "苹果价格是10元,香蕉价格是5元";const regex17 = /价格是 (\d+) 元/g;const prices = text17.match(regex17);if (prices) {​prices.forEach(price => {const num = price.match(/\d+/)[0];​console.log(parseInt(num));// 输出: 10, 5​});}

在第一个替换案例中,replace方法接受一个正则表达式和一个替换字符串,其中 “$1” 表示引用第一个捕获组的内容。在第二个提取案例中,我们先通过正则表达式找到包含价格的子字符串,然后再进一步提取其中的数字。​

(三)贪婪与非贪婪匹配​

在正则表达式中,贪婪模式会尽可能多地匹配字符,而非贪婪模式则会尽可能少地匹配字符。例如,“ab” 是一个贪婪模式,它会匹配 “aabb” 中的 “aabb”;而 “a?b” 是一个非贪婪模式,它会匹配 “aabb” 中的 “ab” 和 “abb”。​

// 贪婪模式案例​const text18 = "aaaab";const regex18 = /a*b/;​console.log(text18.match(regex18)); // 输出: ["aaaab"]​// 非贪婪模式案例​const text19 = "aaaab";const regex19 = /a*?b/;​console.log(text19.match(regex19)); // 输出: ["ab"]​// 提取HTML标签内内容的案例​const text20 = "<div>content1</div><div>content2</div>";const greedyRegex = /<div>.*</div>/;const nonGreedyRegex = /<div>.*?</div>/g;​console.log(text20.match(greedyRegex));// 输出: ["<div>content1</div><div>content2</div>"]​console.log(text20.match(nonGreedyRegex));// 输出: ["<div>content1</div>", "<div>content2</div>"]​

通过这些案例,可以清晰地看到贪婪模式和非贪婪模式在匹配行为上的差异。​

三、正则表达式的高级技巧​

(一)前瞻与后顾​

前瞻(Lookahead)和后顾(Lookbehind)是正则表达式中的高级功能。它们允许我们在匹配时考虑后面的或前面的字符,但不将其包含在匹配结果中。例如,“(?=abc) def” 表示匹配 “def”,但前提是它后面跟着 “abc”。​

// 正向前瞻案例​const text21 = "defabc defxyz";const regex21 = /(?=abc)def/;​console.log(text21.match(regex21)); // 输出: ["def"]​// 正向后顾案例​const text22 = "abcdef xyzdef";const regex22 = /(?<=abc)def/;​console.log(text22.match(regex22)); // 输出: ["def"]​

在 JavaScript 中,正向后顾在某些环境(如 Chrome 浏览器)中支持有限,上述代码在支持正向后顾的环境中运行。​

(二)递归匹配​

递归匹配是一种强大的功能,可以用于匹配嵌套的结构,如括号嵌套。例如,“​

(?>[()]+∣(?R))∗

” 可以匹配嵌套的括号结构。​

const text23 = "((a + b) * (c - d))";const regex23 = /\((?>[^()]+|(?R))*\)/;​console.log(text23.match(regex23));// 输出: ["((a + b) * (c - d))"]​const text24 = "((a + b) * (c - d)";​console.log(text24.match(regex23));// 输出: null​

这个案例展示了递归匹配在处理嵌套结构时的有效性,以及在括号不完整时匹配失败的情况。​

(三)性能优化​

正则表达式的性能优化非常重要,尤其是在处理大量文本时。避免使用过于复杂的正则表达式,尽量减少回溯次数,可以提高匹配效率。​

// 低效的匹配单词方式​const longText = "这是一篇很长很长的文档,包含了很多单词,比如apple, banana, cherry等等";const inefficientRegex = /[a-zA-Z]+|[^a-zA-Z]+/g;​console.time("inefficientMatch");​longText.match(inefficientRegex);​console.timeEnd("inefficientMatch"); ​​// 高效的匹配单词方式(先分割)​console.time("efficientMatch");const words = longText.split(/[^a-zA-Z]+/).filter(word => word.length > 0);​console.timeEnd("efficientMatch"); ​​

在这个案例中,通过console.time和console.timeEnd方法可以对比两种方式的执行时间,明显可以看出先分割的方式在处理大量文本时性能更优。​

四、正则表达式的实践案例​

(一)数据清洗​

在数据处理中,正则表达式可以用于清洗文本数据。例如,去除文本中的多余空格、特殊字符等。​

// 去除多余空格​const text25 = " 你好,世界! ";const regex25 = /\s+/g;const cleanText25 = text25.replace(regex25, " ");​console.log(cleanText25);// 输出: 你好,世界!​// 去除特殊字符​const text26 = "!@#Hello, World$%^";const regex26 = /[!@#$%^&*(),.?":{}|<>]/g;const cleanText26 = text26.replace(regex26, "");​console.log(cleanText26);// 输出: Hello, World​

通过这些案例,我们可以看到正则表达式在数据清洗方面的便捷性。​

(二)文本提取​

从网页或文档中提取特定信息,如标题、链接、日期等,正则表达式是一个非常有用的工具。​

// 从网页中提取链接​const htmlText = "<a href=\"http://example1.com\">链接1</a><a href=\"http://example2.com\">链接2</a>";const linkRegex = /<a href="([^"]+)">/g;const links = htmlText.match(linkRegex);if (links) {​links.forEach(link => {const url = link.match(/"([^"]+)"/)[1];​console.log(url);// 输出: http://example1.com, http://example2.com​});}​​// 从文档中提取标题​const docText = "# 标题1\n内容1\n# 标题2\n内容2";const titleRegex = /^# (.*)$/gm;const titles = docText.match(titleRegex);if (titles) {​titles.forEach(title => {const titleText = title.match(/# (.*)/)[1];​console.log(titleText);// 输出: 标题1, 标题2​});}​​

这里的 “m” 标志表示多行匹配,使得正则表达式能够匹配每一行以 “# ” 开头的内容。​

(三)代码分析​

在代码编辑器中,正则表达式可以用于高亮显示特定的代码模式,如注释、关键字等。​

const code = "# 这是一个注释\nprint('Hello, World!')";const commentRegex = /#.*$/gm;const highlightedCode = code.replace(commentRegex, match => `<span style="color: green;">${match}</span>`);​console.log(highlightedCode);// 输出: <span style="color: green;"># 这是一个注释</span>​// print('Hello, World!')​const keywordRegex = /\b(print|def|class|if|else|for|while)\b/g;const keywordHighlightedCode = highlightedCode.replace(keywordRegex, match​
=> <span style="color: blue;">${match}</span>);​
console.log (keywordHighlightedCode);// 输出: # 这是一个注释​
// print('Hello, World!')​
// 匹配函数定义​
const code2 = "def add (a, b):\n    return a + b";const functionRegex = /def\s+(\w+)\s*

(.?)
:/gm;const functions = code2.match(functionRegex);if (functions) {​
functions.forEach(func => {const name = func.match(/def\s+(\w+)\s*

(.?)
:/)[1];​
console.log(函数名: ${name});// 输出:函数名: add​
});}// 匹配变量声明​
const code3 = "int num = 10;\nstring text = 'Hello';";const variableRegex = /\b\w+\s+\w+\s*=/g;const variables = code3.match (variableRegex);if (variables) {​
console.log (variables);// 输出: ["int num =", "string text ="]​
}​​

相关文章:

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …...

Mysql 行级锁在什么样的情况下会升级为表级锁?

在 MySQL 中&#xff0c;行级锁通常由 InnoDB 存储引擎使用&#xff0c;因为它支持高并发和细粒度的锁定。通常情况下&#xff0c;InnoDB 在执行诸如 UPDATE、DELETE 或 SELECT FOR UPDATE 等操作时&#xff0c;会为被修改的数据行加锁&#xff08;行级锁&#xff09;。但是&am…...

docker部署kkfileview

拉取 KKFileView 镜像 docker pull keking/kkfileview或指定版本 docker pull keking/kkfileview:4.1.0运行 KKFileView 容器 docker run -d \--name kkfileview \-p 8012:8012 \--restart always \keking/kkfileview-d&#xff1a;后台运行 -p 8012:8012&#xff1a;将容器…...

优选算法的妙思之流:分治——快排专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、快速排序 二、例题讲解 2.1. 颜色分类 2.2. 排序数组 2.3. 数组中的第K个最大元素 2.4. 库存管理 III 一、快速排序 分治&#xff0c;简单理解为“分而治之”&#xff0c;将一个大问题划分为若干个…...

蓝桥杯嵌入式第15届真题-个人理解+解析

个人吐槽 #因为最近蓝桥杯快要开始了&#xff0c;我舍不得米白费了&#xff0c;所以就认真刷刷模拟题&#xff0c;但是我感觉真题会更好&#xff0c;所以就看了一下上届的真题。不过它是真的长&#xff0c;我看着就头晕&#xff0c;但是还是把几个模块认真分析了一下就还是很容…...

数据库系统概述 | 第二章课后习题答案

本文为数据库系统概论&#xff08;第五版&#xff09;【高等教育出版社】部分课后答案 如有错误&#xff0c;望指正 &#x1f47b; 习题 &#x1f47b; 答案...

深入解析CPU主要参数:选购与性能评估指南

引言 中央处理器&#xff08;CPU&#xff09;作为计算机的"大脑"&#xff0c;其性能直接决定了整机的运算能力和响应速度。无论是组装新电脑、升级旧系统还是选购笔记本电脑&#xff0c;理解CPU的关键参数都至关重要。本文将从技术角度全面解析CPU的各项主要参数&am…...

Lettuce与Springboot集成使用

一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型&#xff0c;支持同步/异步/响应式编程线程安全&#xff1a;共享单连接实现多线程并发操作&#xff0c;性能衰减低原生支持Redis集群、哨兵、主从架构&#xff0c;自动重连机制保障高可用Spring…...

【Kafka基础】ZooKeeper在Kafka中的核心作用:分布式系统中枢神经系统

在分布式系统的世界里&#xff0c;协调和管理多个节点间的状态是一项复杂而关键的任务。Apache Kafka作为一款高性能的分布式消息系统&#xff0c;其设计哲学是"专为单一目的而优化"——即高效处理消息流。为了实现这一目标&#xff0c;Kafka选择将集群协调管理的重任…...

专业的情商测评工具:EQ-i在线测评系统

专业的情商测评工具&#xff1a;EQ-i在线测评系统 基于巴昂情商量表的专业情商评估工具&#xff0c;帮助您更好地了解自己的情商水平。 什么是EQ-i&#xff1f; EQ-i&#xff08;Emotional Quotient Inventory&#xff09;是由Reuven Bar-On开发的情商量表&#xff0c;是国际上…...

Ubuntu安装Podman教程

1、先修改apt源为阿里源加速 备份原文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 修改源配置&#xff1a; vim sources.list删除里面全部内容后&#xff0c;粘贴阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main re…...

7.训练篇5-毕设

使用23w张数据集-vit-打算30轮-内存崩了-改为batch_size 8 我准备用23w张数据集&#xff0c;太大了&#xff0c;这个用不了&#xff0c;所以 是否保留 .stack() 加载所有图片&#xff1f;情况建议✅ 小数据集&#xff08;<2w张&#xff0c;图像小&#xff09;想加快速度可…...

java数据结构-哈希表

什么是哈希表 最理想的搜索方法 , 即就是在查找某元素时 , 不进行任何比较的操作 , 一次直接查找到需要搜索的元素 , 可以达到这种要求的方法就是哈希表. 哈希表就是通过构造一种存储结构 , 通过某种函数使元素存储的位置与其关键码位形成一 一映射的关系 , 这样在查找元素的时…...

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV Author: Once Day Date: 2025年4月4日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实…...

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…...

解锁健康密码:拥抱活力养生生活

在追求高品质生活的今天&#xff0c;健康养生成为了人们关注的焦点。它不仅关乎当下的生活质量&#xff0c;更是对未来的有力投资。 合理的饮食是健康养生的基石。一日三餐&#xff0c;应遵循 “五谷为养&#xff0c;五果为助&#xff0c;五畜为益&#xff0c;五菜为充” 的原则…...

手动将ModelScope的模型下载到本地

一、ModelScope 介绍 ModelScope 官网地址&#xff1a; https://www.modelscope.cn/home 模型库地址&#xff1a;https://www.modelscope.cn/models 文档中心&#xff1a;https://www.modelscope.cn/docs/home ModelScope旨在打造下一代开源的模型即服务共享平台&#xff0c;为…...

【Git】“warning: LF will be replaced by CRLF”的解决办法

一、原因分析 不同操作系统的换行符标准不同&#xff1a; • Windows&#xff1a;使用 CRLF&#xff08;\r\n&#xff09;表示换行&#xff1b; • Linux/Mac&#xff1a;使用 LF&#xff08;\n&#xff09;表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...

Linux常用基础命令应用

目录 一、文件与目录管理 1. ​​基础导航与查看​​ 2. ​​文件操作核心命令​​ 二、文本处理与日志分析 1. ​​查看与过滤​​ 2. ​​组合命令与管道​​ 三、系统管理与权限控制 1. ​​进程与资源监控​​ 2. ​​权限与用户管理​​ 四、网络与远程操作 1. …...

C++11可变参数模板单例模式

单例模式 该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 通过类模板函数实现不同类型单例&#xff1b;单例类构造函数支持不同的个数&#xff1b;消除代码重复 示例代码 .h文件如下&#xff1a; //C11Singleton.h文件 #pragma oncetemplate <typename T&…...

JVM 有哪些垃圾回收器

垃圾收集算法 标记-复制算法(Copying): 将可用内存按容量划分为两个区域,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面, 然后再把已使用过的内存空间一次清理掉。 标记-清除算法(Mark-Sweep): 算法分为“标记” 和“清除”两个…...

6. 链式结构(Chain)的奥秘:从LLMChain到RouterChain

引言&#xff1a;从“单兵作战”到“流水线革命” 2023年某电商平台客服系统因处理复杂咨询需手动串联多个AI模块&#xff0c;平均响应时间长达12秒。引入LangChain链式架构后&#xff0c;工单处理速度提升8倍&#xff0c;错误率下降45%。本文将深入解析链式编程范式&#xff…...

TypeScript语言的操作系统原理

TypeScript语言的操作系统原理 引言 操作系统是计算机系统中最重要的组成部分之一&#xff0c;它为应用程序提供了一个运行环境&#xff0c;并管理着计算机硬件和软件资源。随着编程语言的发展&#xff0c;特别是TypeScript的流行&#xff0c;许多开发者开始探索将这种强类型…...

时间序列入门

时间序列入门 第一章 时间序列概述1.1 时间序列简介1.1.1 时间序列定义1.1.2 时间序列分量1.1.3 时间序列分类 第二章 时间序列绘图2.1 单变量时序绘制2.2 多变量时序绘制 第一章 时间序列概述 1.1 时间序列简介 1.1.1 时间序列定义 在进行时间序列之前&#xff0c;需要学习…...

VirtualBox安装FnOS

1.下载FnOS镜像 下载网址&#xff1a; https://www.fnnas.com/2.创建虚拟机 虚拟机配置如图所示&#xff08;注意操作系统类型和网卡配置&#xff09; &#xff08;注意启动顺序&#xff09; 3.启动虚拟机 网卡类型选择桥接的Virtual Adapter 如果没有IP地址或者IP地址无法…...

函数栈帧的创建与销毁

函数栈帧的创建与销毁 函数栈帧简介认识寄存器解析函数栈帧的创建与销毁 函数栈帧简介 我们在编程的过程中经常会听见函数栈帧这个词汇&#xff0c;那到底什么是函数栈帧呢&#xff1f;接下来就为大家解答一下&#xff0c;我们都知道&#xff0c;一个函数的创建是需要去开辟空…...

Scheme语言的算法

Scheme语言的算法探索 引言 Scheme是一种以表达式为基础的编程语言&#xff0c;属于Lisp家族&#xff0c;因其简洁、灵活的语法而受到广泛关注。Scheme不仅适合教学&#xff0c;还被用于实际应用开发和研究。本文将深入探讨Scheme语言的算法&#xff0c;包括其基本特性、常用…...

[C++面试] new、delete相关面试点

一、入门 1、说说new与malloc的基本用途 int* p1 (int*)malloc(sizeof(int)); // C风格 int* p2 new int(10); // C风格&#xff0c;初始化为10 new 是 C 中的运算符&#xff0c;用于在堆上动态分配内存并调用对象的构造函数&#xff0c;会自动计算所需内存…...

(回滚莫队)洛谷 P10268 符卡对决 题解

居然还没调出来&#xff1f;感觉是数据类型的问题&#xff0c;真是吓人。先把思路写一下吧。 题意 灵梦一共有 n n n 张符卡&#xff0c;每张卡都有一个能力值&#xff0c;对于第 i i i 张卡&#xff0c;它的能力值为 a i a_i ai​&#xff0c;现在她想从中选出两张符卡并…...

C语言复习笔记--指针(3)

接上篇文章C语言复习笔记--指针(2)-CSDN博客我们继续进行指针的复习. 二级指针 指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那指针变量的地址取出来后要存在在什么变量中呢?这就是⼆级指针. ⼆级指针的运算见下: 指针数组 指针数组概念 既然要联系数组和指针就涉…...

Fastjson 处理 JSON 生成与解析指南

Fastjson 是阿里巴巴开源的高性能 JSON 库&#xff0c;适用于 Java 对象的序列化&#xff08;生成 JSON&#xff09;和反序列化&#xff08;解析 JSON&#xff09;。以下是详细使用指南&#xff1a; 1. 添加依赖 <dependency><groupId>com.alibaba</groupId>…...

深度学习数据集划分比例多少合适

在机器学习和深度学习中&#xff0c;测试集的划分比例需要根据数据量、任务类型和领域需求灵活调整。 1. 常规划分比例 通用场景 训练集 : 验证集 : 测试集 60% : 20% : 20% 适用于大多数中等规模数据集&#xff08;如数万到数十万样本&#xff09;&#xff0c;平衡了训练数…...

查询当前用户的购物车和清空购物车

业务需求&#xff1a; 在小程序用户端购物车页面能查到当前用户的所有菜品或者套餐 代码实现 controller层 GetMapping("/list")public Result<List<ShoppingCart>> list(){List<ShoppingCart> list shoppingCartService.shopShoppingCart();r…...

大模型如何引爆餐饮与电商行业变革

大模型如何引爆餐饮与电商行业变革&#xff1f; 一、时代背景&#xff1a;大模型重构产业逻辑的底层动力 1. 技术跃迁催生效率革命 2025年&#xff0c;大模型技术迎来"普惠临界点"。李开复在中关村论坛指出&#xff0c;大模型推理成本每年降低10倍&#xff0c;使得…...

【MySQL】01.MySQL环境安装

注意&#xff1a;在MYSQL的安装与卸载中&#xff0c;需要使用root用户进行。 一、卸载不必要的环境 • 查看是否有运行的服务 [rootVM-24-10-centos etc]# ps axj |grep mysql1 22030 22029 22029 ? -1 Sl 27 0:00 /usr/sbin/mysqld --daemonize --pid-fi…...

java 匿名内部类 和 Lambda 表达式

java 匿名内部类 和 Lambda 表达式 一、匿名内部类1.1说明1.2 匿名内部类的作用1.3 特点1.4 接口的正常使用情况&#xff08;抽象类同理&#xff09;1.5 通过局部内部类使用接口&#xff08;抽象类同理&#xff09;1.6 通过匿名内部类使用接口&#xff08;抽象类同理&#xff0…...

Linux系统调用编程

进程和线程 进程是操作系统资源分配的基本单位&#xff0c;拥有独立的地址空间、内存、文件描述符等资源&#xff0c;进程间相互隔离。每个进程由程序代码、数据段和进程控制块&#xff08;PCB&#xff09;组成&#xff0c;PCB记录了进程状态、资源分配等信息。 线程是…...

Redis 数据类型详解

Redis 数据类型详解 Redis 是一个高性能的键值存储系统&#xff0c;支持多种数据类型&#xff0c;每种类型都有其特定的使用场景和操作命令。以下是 Redis 主要数据类型的详细介绍&#xff1a; 一、基本数据类型 1. String&#xff08;字符串&#xff09; 特点&#xff1a;…...

orangepi zero烧录及SSH联网

下载对应版本的armbian镜像 armbian的默认用户root&#xff0c;默认密码&#xff1a;1234 下载烧录工具win32diskimager https://sourceforge.net/projects/win32diskimager/files/Archive/ 插入16G以上TF卡&#xff0c;使用win32diskimager烧录armbian镜像 烧录完毕后用l…...

七均线策略思路

一种基于移动平均线的交易策略&#xff0c;具体如下&#xff1a; 1. 移动平均线计算&#xff1a; 计算了六个不同周期的收盘价移动平均值&#xff0c;分别为MA5、MA10、MA20、MA30、MA40和MA60。 2. 买入条件&#xff08;BK&#xff09;&#xff1a; 当满足以下所有条件时执行买…...

【python脚本】基于pyautogui的python脚本

一、什么是自动化 自动化是指使用技术手段模拟人工&#xff0c;执行重复性任务。准确率100%&#xff0c;高于人工。 自动化应用场景&#xff1a; 自动化测试自动化运维自动化办公自动化游戏 二、pyautogui的使用 先使用 pip install pyautogui 指令安装这个第三方库 2.1 …...

人工智能时代人才培养的变革路径:模式创新、能力重塑与认证赋能

在科技日新月异的今天,人工智能(AI)已成为推动社会进步与经济发展的核心力量。从自动驾驶到医疗诊断,从金融分析到教育创新,AI的触角已延伸至人类生活的每一个角落。这一变革不仅重塑了产业格局,更对人才培养提出了前所未有的挑战与机遇。在人工智能时代,如何培养适应未…...

xpath定位

一、路径符号核心区别&#xff08;表格速查&#xff09; 符号名称作用范围典型使用场景性能影响/单斜杠./ 相对路径直接子级, /绝对路劲-根路径精确层级定位高效//双斜杠//当前元素下开始查找&#xff0c;可以跨嵌套层模糊层级/跨嵌套定位较低效 一、XPath基础定位类型&#…...

Python列表(List)深度解析

列表(List)是Python中最基础且强大的数据结构之一&#xff0c;但它的底层实现和特性远比表面看起来复杂。本文将深入探讨列表的各个方面。 1. 列表基础特性 1.1 可变序列类型 lst [1, 2, 3] lst[1] 20 # 可变性1.2 异构容器 mixed [1, "hello", 3.14, [1, 2]…...

Mybatis---入门

1. 什么是MyBatis? MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发。 MyBatis本是 Apache的⼀个开源项⽬iBatis&#xff0c;2010年这个项⽬由apache迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11⽉迁移到Github. 官⽹&#xff1a;MyBa…...

FPGA--HDLBits网站练习

目录 用状态机编写一个 LED流水灯代码 CPLD和FPGA芯片 CPLD&#xff08;复杂可编程逻辑器件&#xff09; FPGA&#xff08;现场可编程门阵列&#xff09; Verilog练习 基本 向量 用状态机编写一个 LED流水灯代码 往期作业已完成&#xff0c;博客地址&#xff1a; FPGA…...

《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】

我们在学习 linux 内核时&#xff0c;会涉及到很多 numa 的知识&#xff0c;那我们该如何在 qemu 中模拟这种情况&#xff0c;来配合我们的学习呢&#xff1f; 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…...

如何分析 jstat 统计来定位 GC?

全文目录&#xff1a; 开篇语前言摘要概述jstat 的核心命令与参数详解基本命令格式示例 jstat 输出解读主要字段含义 典型 GC 问题分析案例案例 1&#xff1a;年轻代 GC 过于频繁案例 2&#xff1a;老年代发生频繁 Full GC案例 3&#xff1a;元空间&#xff08;Metaspace&#…...

Day51 | 3. 无重复字符的最长子串、12. 整数转罗马数字、49. 字母异位词分组、73. 矩阵置零

3. 无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;中等 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> setnew HashSet<&…...

【Linux系统编程】进程概念,进程状态

目录 一&#xff0c;操作系统&#xff08;Operator System&#xff09; 1-1概念 1-2设计操作系统的目的 1-3核心功能 1-4系统调用和库函数概念 二&#xff0c;进程&#xff08;Process&#xff09; 2-1进程概念与基本操作 2-2task_struct结构体内容 2-3查看进程 2-4通…...