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

第十九章 正则表达式

第十九章 正则表达式

文本型数据在所有的类UNIX系统(如 Linux)中会扮演着重要角色,在完全领会这些工具的全部特征之前,要先了解一下工具最为复杂的用法和相关技术:正则表达式。

什么是正则表达式

简单地说,正则表达式是一种用于识别文本模式的符号表示法,在某种程度上类似于匹配文件和路径名的Shell通配符,但用途更广。大多数工具和编程语言都支持正则表达式,以便于解决文本问题。正则表达式并非全都相同;不同的工具,不同的编程语言,其正则表达式实现略有差异。本章正则表达式限定在POSIX标准范围内,涵盖了大多数命令行工具,相较于许多编程语言,POSIX使用的符号写法要略微丰富一些。

grep

处理正则表达式的主要命令是grep。grep源于global regular expression print, 译为全局正则表达式输出。grep的基本功能实在文本文件搜索与指定的正则表达式匹配的文本,将包含匹配项的文本输出到标准输出。

grep命令用法如下,其中regex代表正则表达式:

grep [options] regex [file...]

常用grep选项

选项描述
-i, --ignore-case忽略字母大小写。不区分大写字母和小写字母
-v, --invert-match反向匹配。在正常情况下,grep会输出包含匹配项的文本行。该选项则使grep输出所有不包含匹配项的文本行
-c, --count输出匹配数量(如果同时制定了-v选项,则不输出匹配数量),不在输出文本行
-l, --files-with-matches输出包含匹配项的文件名,不在输出文本行
-L,–files-without-match和-l选项类似,但是只输出不包含匹配的文件名
-n,–line-number在包含匹配项的文本行之前加上行号
-h,–no-filename在多文件搜索中禁止输出文件名

例如:在以dirlist开头的txt文件内搜索bzip字符串

grep bzip dirlist*.txt

命令输出如下:


dirlist-bin.txt:bzip2
dirlist-bin.txt:bzip2recover


如果只需要包含匹配的项的文件,并不需要匹配项,可以指定-l选项:

grep -l bzip dirlist*.txt

输出结果如下:


dirlist-bin.txt



如果只需要不包含匹配项的文件,可以这样做:
grep -L bzip dirlist*.txt

输出结果如下:

dirlist-sbin.txt
dirlist-usr-bin.txt
dirlist-usr-sbin.txt



元字符与文字字符

通过grep搜索的时候其实已经正在使用正则表达式了,尽管是非常简单的那种。正则表达式bzip的意思是仅当文件中的某行至少包含4个字符且字符顺序为b、z、i、p的时候(之间没有任何其他字符)才匹配。字符串bzp中的字符全部都是文字字符(literal character),只能匹配自身。除了普通字符,正则表达式还包括元字符(metacharacter),用于指定更复杂的匹配。正则表达式元字符包括:


^ $ . [ ] - ? * + ( ) | \



其他所有字符均被视为普通字符,不过在少数情况下,反斜线字符可用于创建元序列(metasequenece),还能转义字符,使其成为普通字符。

注意
很多正则表达式元字符对Shell扩展具有特殊含义。当包含元字符的正则表达式出现在命令行上时,一定要记得将其放入引号中,避免Shell去扩展这些字符,这一点非常重要。



任意字符

用于匹配任意字符的元字符是点号“.”,它可用于匹配任意字符。如果我们将其放入正则表达式,它能够匹配该字符位置上的任意字符。

grep -h '.zip' dirlist*.txt

输出结果如下:


bunzip2
bzip2
bzip2recover
gunzip
gzip
funzip
gpg-zip
preunzip
prezip
prezip-bin
unzip
unzipfx



在文件内搜索匹配正则表达式.zip的所有行。最终结果的有些地方值得注意。首先,在其中没有发现.zip程序。这是因为正则表达式中的点号元字符将需要匹配的字符串长度增加到了4个字符,又因为zip只包含3个字符,所以不匹配。如果文件列表中有扩展名为.zip的文件,也能够匹配,因为扩展中的点好也属于“任意字符”的范畴。


锚点

在正则表达式中,脱字符^和美元符号$被视为锚点(anchor),分别表示仅当正则表达式出现在行首或行尾的时候才匹配。

例如在以dirlist开头的txt文件中匹配行首为zip的行:

grep -h '^zip' dirlist*.txt

命令输出结果如下:


zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit



在以dirlist开头的txt文件中匹配行尾为zip的行:
grep -h 'zip$' dirlist*.txt

命令行输出结果如下:

gunzip
gzip
funzip
gpg-zip
preunzip
prezip
unzip
zip



在以dirlist开头的txt文件匹配行内容为zip文件:

grep -h '^zip$' dirlist*.txt

该命令输出结果如下:

zip


在文件列表中分别搜索于行首、位于行尾、单独作为一行的字符串zip。注意,正则表达式^$(表示行首和行尾之间什么都没有)可以匹配空行。

方括号表达式与字符类

除了匹配正则表达式中指定位置上的任意字符,还可以使用方括号表达式来匹配指定字符集合中的单个字符。借助方括号表达式,可以指定一组待匹配的字符(包括会被解释为元字符的字符)。使用两个字符组成的集合来匹配包含字符串bzip或gzip的行:

grep -h '[bg]zip' dirlist*.txt

集合中可以包含任意数量的字符,其中出现的元字符会丢失其特殊含义。但是,有两种特殊情况:脱字符用于表示否定;连字符表示字符范围。

排除


如果方括号表达式中的首个字符是脱字符,剩下的字符则被视为不该在指定字符位置出现的字符集合。将前一个例子修改如下:
grep -h '[^bg]zip' dirlist*.txt

输出结果如下:

bunzip2
gunzip
funzip
gpg-zip
preunzip
prezip
prezip-bin
unzip
unzipsfx


利用排除操作,得到了一份文件列表,其中的文件名均包含字符串zip,而该字符之前是除b或g之外的任意字符。注意,zip并不符合搜索文件。排除型字符集合仍需要指定位置上有一个字符存在,只不过这个字符不能使集合中的字符。

仅当脱字符是方括号表达式中的第一个字符的时候才表示排除含义;否则,它只代表一个普通字符。

传统的字符范围

构建一个正则表达式,查找文件列表中所有以大写字母开头的文件,可以这样做:

grep -h '^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' dirlist*.txt

把26个大写字母放进方括号表达式里就能搞定的事。但这种方法比较实在麻烦,另一种做法:

grep -h  '^[A-Z]'  dirlist*.txt

输出结果如下:

MAKEDEV
ControlPanel
GET
HEAD
POST
X
X11
Xorg
MAKEFLOPPIES
NetworkManager
NetworkManagerDisaptcher



通过使用3个字符表示的字符范围,直接实现了26个字母的缩写。不管哪种字符范围,都可以用这种方式表达,例如下面的正则表达式可以匹配以字母或数字开头的所有文件名:
grep -h  '^[A-Za-z0-9]' dirlist*.txt

如何在方括号表达式中加入一个普通的连字符,这将匹配包含大写字母的文件名,以下文件将匹配每个包含破折号或大写A(Z)的文件名。

grep -h '[-AZ]'  dirlist*.txt

POSIX字符类

传统的字符范围易于理解,能够有效地解决快速指定字符集合的问题。遗憾的是,这种方法未必总是管用。在使用grep时没有出现什么问题,很难说不会在其他程序那里遇到问题。

字符范围的用法几乎与正则表达式中的一致,但有个问题:

ls /usr/sbin/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]

该命令输出结果如下:

/usr/sbin/ModemManager
/usr/sbin/NetworkManager



取决于Linux发行版,得到的文件列表也不尽相同,也有可能时空列表。本例取自Ubuntu。该命令的结果符合预期——以大写字母开头的文件列表,但下面的命令得到的结果就完全不同了(只显示其中一部分):

ls /usr/sbin/[A-Z]*

该命令输出结果如下:

/usr/sbin/biosdecode
/usr/sbin/chat
/usr/sbin/chgpasswd
/usr/sbin/chpasswd
/usr/sbin/chroot
/usr/sbin/cleanup-info
/usr/sbin/complain
/usr/sbin/console-kit-daemon



该例子没有按照预期输出,这是因为UNIX开发支出只识别ASCCII字符,其排序规则如下(collation order):


ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz



这与正常的词典序不同,后者如下:

aAbBcCdDeEfFgGhHiIJkKlLmMnNoOpPQrRsStTuUvVwWxXyYzZ



随着UNIX的流行,支持美式英语字符以外的字符的需求也与日俱增。于是ASCII长度扩展到8bit,添加了编码值128~255字符,适应了更多的语言。因此POSIX标准引入了语言环境(locale)的概念,能够通过调整来选择特定区域所需要的字符集。可以使用以下命令查看系统的语言配置:
echo $LANG
en_US.UTF-8

随着UNIX的流行,兼容POSIX的应用就会使用词典排序,而不再是ASCII的顺序。这就解释了上述命令结果的不同。在词典序中,字符范围[A-Z]包含除a之外的所有字母,这也正是看到的结果。

为了部分解决这个问题,POSIX标准包含了许多字符类(character class),提供了各种有用的字符范围。

POSIX字符类

字符类描述
[:alnum:]字母和数字字符。在ASCII中,等价于[a-zA-Z0-9]
[:word:]和[:alnum:]一样,另外加入了下画线字符_
[;alpha;]字母字符。在ASCII中,等价于[a-zA-Z]
[:blank:]包括空格符和制表符
[:cntrl:]ASCII控制字符。包括ASCII编码值0~31和127的字符
[:digit:]数字0~9
[:graph:]可见字符。在ASCII中,包括编码值为33~126的字符
[:lower:]小写字母
[:punct:]标点符号字符。在ASCII中,等价于[-!"#$%&()*+,./:;<=>?@[\]_`{
[:print:]可输出字符。包括[:graph:]中的所有字符加上空格符
[:space:]空白字符,包括空格符、制表符、回车符、换行符、垂直制表符、换页符
[:upper:]大写字符
[:xdigit;]用于表示十六进制数值的字符。在ASCII中,等价于[0-9A-Fa-f]

即便有了POSIX字符类,还是没有便利的方法来表示部分范围,例如[A-M]。

这不是正则表达式的示例,而是Shell路径名扩展的示例。我们之所以在此演示,是因为POSIX字符类既可用于正则表达式,也可用于Shell扩展。


POSIX基本型正则表达式于扩展型正则表达式

POSIX把正则表达式的实现分为了两类:基本正则表达式(Basic Regular Expression, BRE)与扩展正则表达式(Extended Regular Expression, ERE)。所有兼容POSIX并实现了BRE应用程序都支持目前介绍的这些特征。grep程序就是这样的程序之一。

BRE和ERE的不同在于元字符。BRE识别下列元字符:


^ $ . [ ] *


除此之外的所有字符均被视为文字字符。ERE又加入了下列元字符(及其功能):


( ) { } ? + |


但是,如果使用了反斜线将(、)、{、}转义的话,BRE将其视为元字符;而BRE会将转义后的这些字符视为文字字符。

若要使用ERE,就得使用另一种grep。传统上,这要借助于egrep程序,但是GNU版本的grep程序可以使用-E选项来支持ERE。

POSIX:电气电子工程师学会(Institute of Electrical and Electronics Engineer, IEEE)出现了。IEEE制定了一套规范UNIX(以及类UNIX系统)
工作方式标准。这些标准官方名称是IEEE 1003,它定义了应用程序接口(Application Programming Interface, API)、Shell以及标准类UNIX系统中的实用工具。POSIX这个名字是由理查地·马修·斯托曼建议,结尾增加的X只是为了让名字更响亮,该叫法后被IEEE采纳。

多选结构

ERE的特征叫作多选结构(alternation),它允许匹配一组正则表达式中的某一个。就像方括号表达式允许匹配一组指定字符中的单个字符,多选结构可以从一组字符串或正则表达式中寻找匹配。

例如:查找包含AAA或BBB内容的行,其命令如下:

grep -E 'AAA | BBB'

其中-E选项指定采用ERE(扩展性正则表达式),将正则表达式放入引号中,避免Shell将其解释为管道。多选结构可不仅能二选一:

grep -E 'AAA | BBB | CCC'

将多选结构与其它正则表达式元素组合起来,可以实用()来分隔,例如:

grep -Eh '^(bz | gz | zip)' dirlist*.txt

改正则表达式可以匹配文件列表中以bz、gz或zip开头的文件名。如果去掉括号,正则表达式的含义就变成了匹配以bz开头,或者包含gz,或者包含zip的文件名:
grep -Eh '^bz | gz | zip' dirlist*.txt

量词

ERE支持多种方式指定匹配次数

?——匹配0次或1次

实际上,该量词(quantifier)表示“之前的元素是可选的”。假设我们要检查电话号码有效性。电话号码匹配下列两种形式之一(n为数字),则认为是有效的。

  • (nnn)nnn-nnnn。
  • nnn nnn-nnnn

根据据此构建下列正则表达式:


^(?[0-9] [0-9] [0-9] )? [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]$


其中,在括号后加上了问号,表示匹配括号的内容0次或1次。因为括号是元字符(在ERE中),所以在其之前加上反斜线,使其成为文字字符。


匹配符合(nnn)nnn-nnnn格式的电话号码:

echo "(555) 123-4567" | grep -E '^\(?[0-9] [0-9] [0-9]\)? [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]$'

命令输出如下:

(555) 123-4567



从结果可以看出能够匹配nnn nnn-nnnn格式的电话号码。

匹配符合nnn-nnnn格式的电话号码:

echo "555 123-4567" | grep -E '^\(? [0-9] [0-9] [0-9]\)? [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]$'

命令输出如下:


555 123-4567



可以看到能够匹配符合nnn nnn-nnnn格式的电话号码。

匹配不符合以上两种格式的情况:

echo "AAA 123-4567" | grep -E '^\(? [0-9] [0-9] [0-9]\)? [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9] $'

该命令无输出表示不符合以上两种格式,说明该正则表达式可以用于初步验证电话号码。

*——匹配0次或多次

和?一样,*也可用于表示可选项;但和?不同的是,*之前的可选项可以出现任意多次,而不仅仅出现一次。例如判断某个字符串是否是一句话;也就是说该字符以一个大写字母开头,然后是任意多个大/小写字母和空格符,最后以点好结尾。可以实用下列正则表达式:


[ [:upper:] ] [ [;upper;] [;lower;] ]* .



这个正则表达式由3项组成:包含字符类[:upper:]的方括号表达式,包含字符类[;upper;]、[;lower;]以及空格符的方括号表达式,经过反斜线转义的点好。第二项结尾处是*,所以在句子开头的大写字母之后,不管有多少个大/小写字母和空格符,都能够匹配。

匹配只有首字母大写的句子:

echo "This works." | grep -E '[ [:upper:] ] [ [;upper;] [;lower;] ]* \.'  

命令输出如下:

This works



从结果可以匹配只有首字母大写的句子。

匹配首字母大写并且除此之外还有其他大写字母的句子:

echo "This Works" | grep -E '[ [:upper:] ] [ [;upper;] [;lower;] ]* \.'

输出结果如下:


This Works



从结果可以看出能够匹配首字母大写并且含有其他大写字母的句子。


匹配只有小写字母的句子:

echo "this works not" | grep -E '[ [:upper:] ] [ [;upper;] [;lower;] ]* \.'

没有输出结果,说明该正则表达式正确,因为首字母不是大写字母。


+——匹配1次或多次

+和*差不多,只不过要求之前的可选项至少匹配一次。下面的正则表达式所匹配的行只能包含由单个空格分隔的一个或多个字母:



^ ( [ [:alpha:] ] + ?) + $



匹配有两个单词和一个空格分隔符:

echo "This that"  | grep -E '^([[:alpha:]]+ ?)+$'

输出结果如下:

This that



可以看出能够匹配两个单词一个空白分隔符。


匹配3个字母每两个字母间隔一个空格分隔符

echo "a b c" | grep -E '^([[:alpha:]]+ ?)+ $'

输出结果如下:

a b c



从结果可看出可以匹配由单个字母和空白分隔符组成的句子。


匹配由字母和数字匹配单个字母和空白分隔符组成的句子:

echo "a b 9" | grep -E '^([[;alpha;]]+ ?)+$'

没有输出结果,因为不能包含非字母字符。

匹配由单词和字母以及两个空白分隔符组成的句子:

echo "abc  d" | grep -E '^([[:alpha:]]+ ?)+$'

没有输出结果,因为c和d之间不止有一个空白字符。

{} —— 匹配指定次数

{和}用于指定要求匹配的最小次数和最大次数,共有4种指定方式。

指定匹配次数

指定方式含义
{n}匹配之前的元素n次
{n,m}匹配之前的元素至少n次,至多m次
{n,}匹配之前的元素至少n次,最多不限
{,m}匹配之前的元素不超过m次

实用{}将前文的电话号码例子,简化为


‘^/( ?[0-9]{3} /)? [0-9] {3} - [0-9] {4}$’



匹配符合(nnn)nnn-nnnn的电话号码:
echo "(555) 123-4576" | grep -E '^/(?[0-9]{3}/)?[0-9]{3}-[0-9]{4}$'

输出结果如下:


(555) 123-4576


结果表明可以匹配此类格式的电话号码,与前一种写法结果相同,但是书写更方便。

匹配符合nnn nnn-nnnn的电话号码:

echo "555 123-4576" | grep -E '^/(?[0-9]{3}/)?[0-9]{3}-[0-9]{4}$'

输出结果如下:


555 123-4576


结果表明可以匹配此类格式的电话号码,与前一种写法结果相同,但是书写更方便。

匹配不符合的情况:

echo "AAA 123-4567" | grep -E '^/(?[0-9]{3}/)?[0-9]{3}-[0-9]{4}$'

没有输出结果,说明与预期相符合,可以替代原来的书写方式。

find使用正则表达式

find path -regex 'stirng' #在path目录查找匹配正则表达式string的文件

locate使用正则表达式
locate即支持BRE(–regexp选项)也支持ERE(–regex选项)。

locate --regex 'string' #在/目录查找匹配正则表达式string的文件

Less和Vim搜索文本

Less下的正则表达式:


/‘regex’


Less会高亮出匹配项,这样就很容易分辨出无效号码:

Vim只支持BRE,因此用于搜索的正则表达式得改写成这样


/([0-9]{3}) [0-9]{3}-[0-9]{4}


对于ERE支持的符号需要在其前面加上\。

相关文章:

第十九章 正则表达式

第十九章 正则表达式 文本型数据在所有的类UNIX系统(如 Linux)中会扮演着重要角色&#xff0c;在完全领会这些工具的全部特征之前&#xff0c;要先了解一下工具最为复杂的用法和相关技术&#xff1a;正则表达式。 什么是正则表达式 简单地说&#xff0c;正则表达式是一种用于…...

browser-use Agent 日志链路分析

browser-use Agent 日志链路分析 本节详细梳理 browser-use Agent 的日志输出&#xff0c;从 Agent 初始化到每一步的行为日志&#xff0c;帮助理解其行为轨迹。 1. Agent 初始化阶段 日志点&#xff1a; logger.info(&#x1f9e0; Starting a browser-use agent ...) 记录 …...

Qwen3高效微调

高效微调 场景、模型、数据、算力 高效微调的应用场景 对话风格微调&#xff1a;高效微调可以用于根据特定需求调整模型的对话风格。例如&#xff0c;针对客服系统、虚拟助理等场景&#xff0c;模型可以通过微调来适应不同的 语气、礼貌程度 或 回答方式&#xff0c;从而在与…...

Gitee Wiki:重塑关键领域软件研发的知识管理范式

在数字化转型浪潮席卷全球的当下&#xff0c;关键领域软件研发正面临前所未有的知识管理挑战。传统文档管理模式的局限性日益凸显&#xff0c;知识传承的断层问题愈发严重&#xff0c;团队协作效率的瓶颈亟待突破。Gitee Wiki作为新一代知识管理平台&#xff0c;正在通过技术创…...

redis的哨兵模式和Redis cluster

目录 一. redis的主从复制 二. 哨兵模式 2.1 定义 2.2 作用 2.3 配置实例 三. Redis cluster 3.1 定义 3.2 作用 3.3 配置实例 1. 新建集群文件目录 2. 准备可执行文件到每个文件夹 3. 开启群集功能 4. 启动redis节点 5. 查看是否启动成功 6. 启动集群 7. 测试…...

MySQL计算精度计算加减乘除取模方式和方法总计

以下是 MySQL 中常用计算方式和方法 的总结,涵盖不同场景下的使用方式及示例说明: 1. 基本算术运算 适用场景: 对表中的字段或数值进行基础数学运算(加、减、乘、除、取模)。适用于单条记录的字段计算(如单价+税金、折扣后的价格等)。运算符: 运算符描述示例+加法SELE…...

农业机器人的开发

农业机器人的开发 喷农药机器人 番茄采摘机器人 葡萄采摘机器人 黄瓜采摘机器人 西瓜采摘机器人 蘑菇采摘机器人 草莓采摘机器人 草莓采摘机器人综述 视觉系统 CCD摄像机&#xff0c;距离传感器&#xff0c;PC计算机 其中CCD摄像机的作用是进行彩色图像的采集和进行果…...

Swift 解锁 LeetCode 热门难题:不改数组也能找出重复数字?

文章目录 摘要描述题解答案题解代码分析解读&#xff1a; 示例测试及结果时间复杂度空间复杂度总结实际场景类比可运行 Demo&#xff08;Swift Playground&#xff09;未来展望 摘要 在数组中找出唯一的重复数字&#xff0c;听起来像一道简单的题目&#xff0c;但如果你不能修…...

2025年微信小程序开发:趋势、最佳实践与AI整合

引言 微信小程序自2017年推出以来&#xff0c;已成为中国互联网生态中不可或缺的一部分。根据最新数据&#xff0c;截至2024年&#xff0c;微信小程序的日活跃用户超过4.5亿&#xff0c;总数超过430万个&#xff0c;95%的中国企业拥有自己的小程序&#xff08;WeChat Mini Pro…...

【深度学习】15. Segment Anything Model (SAM) :基于提示的分割新时代

Segment Anything Model (SAM) &#xff1a;基于提示的分割新时代 基本介绍 The first foundation model for promptable segmentation. Segment Anything Model&#xff08;简称 SAM&#xff09;是 Meta AI 于 2023 年提出的一种通用型图像分割基础模型。与以往分割模型不同&…...

Java从入门到精通 - 常用API(一)

常用 API 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录 常用 API1. 包代码演示 2. String2.1 String 概述代码演示总结 2.2 String 的常用方法代码演示 2.3 String 使用时的注意事项第一点第二点代码演示 总结题目 2.4 String…...

SQL 筛选出在表1但不在表2中的数据

SQL 筛选出在表1但不在表2中的数据 在SQL中&#xff0c;要筛选出存在于表1但不存在于表2中的数据&#xff0c;有几种常见的方法&#xff1a; 方法1&#xff1a;使用LEFT JOIN WHERE IS NULL SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.join_key t2.join_key W…...

MATLAB实战:实现数字调制解调仿真

以下是使用MATLAB实现BPSK和QPSK数字调制解调仿真的完整代码。该代码包括调制、AWGN信道、匹配滤波/相关解调、星座图绘制以及误码率计算与理论值比较。 %% 清理环境 clear all; close all; clc; %% 参数设置 numBits 100000; % 传输比特数 EbN0_dB 0:2:10; …...

ccf中学生计算机程序设计入门篇课后题p164页test(1)-2 输入一个数,统计这个数二进制中1的个数

include <iostream> using namespace std;int main() {int x;int n 0;// 输入数据cin >> x;// 统计x二进制中1的个数for (n 0; x ! 0; x & x - 1) {n;}// 输出结果cout << n << endl;return 0; }程序解释&#xff1a; 输入&#xff1a;程序从标…...

实现Cursor + Pycharm 交互

效果演示&#xff1a; 直接可以在cursor或Pycharm中点击右键点击&#xff0c;然后就可以跳转到另一个应用的对应位置了 使用方法&#xff1a; 分别在两个应用中安装插件【Switch2Cursor Switch2IDEA&#xff0c;这两个插件分别安装在 IDEA 和 Cursor 中】&#xff1a; Switc…...

C++标准模板库

C标准库参考&#xff1a; C 标准库-CSDN博客 标准模板库STL C 标准库 和 STL 的关系 1. 严格来说&#xff0c;STL ≠ C 标准库 STL&#xff08;Standard Template Library&#xff09; 是 C 标准库的一个子集&#xff0c;主要提供泛型编程相关的组件&#xff08;如容器、迭代器…...

dvwa6——Insecure CAPTCHA

captcha&#xff1a;大概是“我不是机器人”的一个勾选框或者图片验证 LOW: 先输入密码正常修改试一下&#xff08;123&#xff09;&#xff0c;发现报错 查看源码&#xff1a; <?phpif( isset( $_POST[ Change ] ) && ( $_POST[ step ] 1 ) ) {// Hide the C…...

【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声

机器学习模型的误差分析 V1.0机器学习模型的衡量准则概念引入机器学习模型误差分析误差出现的原因及消除 V1.0 机器学习模型的衡量准则 衡量机器学习模型的好坏可以考虑以下几个方面&#xff1a; 偏差&#xff08;Bias&#xff09;&#xff1a; 在充分训练的情况下&#xff0…...

【学习笔记】On the Biology of a Large Language Model

On the Biology of a Large Language Model 1 Introduction 目标是对这些模型的内部工作机制进行逆向工程&#xff0c;从而更好地理解它们&#xff0c;并评估它们是否适合特定用途。 正如细胞是生物系统的基本构建单元&#xff0c;我们假设特征是模型内部计算的基本单位。仅仅…...

飞腾D2000,麒麟系统V10,docker,ubuntu1804,小白入门喂饭级教程

#下载docker Index of linux/static/stable/ 根据电脑的CPU类型选择&#xff1a; Intel和AMD选x86_64飞腾D2000选aarch64 #选择较新的版本 #在包含下载的docker-XX.X.X.tgz的文件夹中右键->打开终端 # 解压安装包&#xff08;根据实际下载的文件&#xff09; tar -zxvf …...

星野录(博客系统)测试报告

目录 一. 项目背景 二、项目功能 三、测试计划 1. 功能测试 1.1 测试用例 1.2 执行测试部分操作截图 2. 使用selenium进行自动化测试 2.1 添加相关依赖 2.2 登录页面测试 3.3 注册页面测试 3.4 博客列表页面测试 3.5 博客详情页测试 3.6 博客编辑页面测试 3.7 个人…...

使用 Java 实现一个简单且高效的任务调度框架

目录 一、任务调度系统概述 (一)任务调度的目标 (二)任务调度框架的关键组成 二、任务状态设计 (一)任务状态流转设计 (二)任务表设计(SQL) 三、单机任务调度实现 (一)获取待处理任务 (二)执行任务 代码实现(单线程版本) (三)多线程提高吞吐量 四…...

2022—2025年:申博之路及硕士阶段总结

文章目录 1 前景概要2 打造神兵利器2.1 夺天地之精2.2 锻兵魂之形2.3 契人兵之命 3 潜心闭关修炼3.1 第一阶段&#xff1a;苦心智3.2 第二阶段&#xff1a;劳筋骨3.3 第三阶段&#xff1a;摧意志 4 突破晋级4.1 突破失败4.2 聚气凝神4.3 心魔再现4.4 新起点 5 回顾及深思 1 前景…...

项目执行中缺乏灵活应对机制,如何增强适应性?

项目执行中缺乏灵活应对机制可以通过建立风险预警机制、培养团队快速响应能力、制定动态调整方案、加强团队沟通协作、引入敏捷管理理念来增强适应性。 其中&#xff0c;培养团队快速响应能力尤为重要。这种能力意味着当项目遇到突发状况时&#xff0c;团队能迅速评估问题、确定…...

Agentic Workflow是什么?Agentic Workflow会成为下一个AI风口吗?

无论是想要学习人工智能当做主业营收&#xff0c;还是像我一样作为开发工程师但依然要运用这个颠覆开发的时代宠儿&#xff0c;都有必要了解、学习一下人工智能。 近期发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;入行门槛低&#x…...

大模型模型推理的成本过高,如何进行量化或蒸馏优化

在人工智能的浪潮中,大模型已经成为推动技术革新的核心引擎。从自然语言处理到图像生成,再到复杂的多模态任务,像GPT、BERT、T5这样的庞大模型展现出了惊人的能力。它们在翻译、对话系统、内容生成等领域大放异彩,甚至在医疗、金融等行业中也开始扮演重要角色。可以说,这些…...

BUUCTF[极客大挑战 2019]EasySQL 1题解

[极客大挑战 2019]EasySQL题解 分析解题过程漏洞原理分析明确注入点&#xff1a;尝试万能密码法法一法二 总结 分析 从题目分析&#xff0c;这道题应该与SQL注入有关&#xff0c;启动靶机之后&#xff0c;访问url是一个登录界面&#xff0c;随便输入用户名密码之后&#xff0…...

Css样式中设置gap: 12px以后左右出现距离问题解析

原因核心&#xff1a; 虽然写的是&#xff1a; display: flex; gap: 12px;但在实际 DOM 中&#xff0c;这段结构&#xff1a; <div class"el-form-item__content"><div class"el-input"><input type"text" class"el-inpu…...

MySQL问题:count(*)与count(1)有什么区别

Count&#xff08;1&#xff09;查询过程 如果表里只有主键索引&#xff0c;没有二级索引时&#xff0c;InnoDB循环遍历主键索引&#xff0c;将读取到的记录返回给Server层&#xff0c;但是不会读取记录中的任何字段的值&#xff0c;因为count函数的参数是1&#xff0c;不是字…...

大模型 提示模板 设计

大模型 提示模板 设计 论文介绍:LangGPT - 从编程语言视角重构大语言模型结构化可复用提示设计框架 核心问题: 现有提示工程缺乏结构化设计模板,依赖经验优化,学习成本高且复用性低,难以支持提示的迭代更新。 创新思路: 受编程语言的结构化和可复用性启发,提出LangGP…...