正则表达式入门指南:从查询思维到实战应用
不瞒你说我最早接触正则表达式的时候也吃过不少苦头今天记了\d是数字明天忘了*和的区别写出来的表达式在测试工具里跑得好好的一放进代码里就各种不行最尴尬的是看别人写的正则每个符号都认识连起来完全不知道在干嘛。后来工作久了才慢慢悟明白正则这东西根本不是靠背语法表学会的它本质上是一种描述文本模式的查询思维。这篇文章我就是想把这种思维体系讲清楚当好一本不劝退的正则教科书让刚入门的同学能建立起一套可复用的理解框架也让用过但总在细节上翻车的同学补上那些没人细说的关键点。放心全文不堆术语所有概念都会用生活化的方式拆开最后还附了一批可以直接抄的实战示例。1. 正则不是语法表而是一种查询思维1.1 先弄明白正则到底在干嘛很多人学正则失败是因为一上来就背符号反斜杠加小写 d 是数字反斜杠加 w 是字母下划线……背是背下来了但遇到实际问题还是不会组合。我后来的理解是正则表达式本质上是一套条件描述语言你用它向程序描述我到底想在文本里找什么样的东西程序按这个描述去扫一遍文本把符合条件的内容给你找出来。打个比方你让朋友帮你在人群里找一个穿黑色外套、戴眼镜、身高一米七五左右的男生。你不会说第三个转角的那个因为人不在你眼前你会描述他的特征组合。正则做的事情一模一样它描述的是文本里的长相比如一连串数字一个大写字母开头后面跟着至少两位小写字母出现在行首的以 http 开头的链接。这个认知特别重要因为我发现所有能熟练使用正则的人思考方式都是先描述特征再翻译成表达式而不是先回忆某个符号是什么意思。举个例子你脑子里想的是我要找 11 位数字那么落到正则上就是数字这个特征对应\d11 位这个数量对应{11}拼起来就是\d{11}就这么简单。复杂正则看起来吓人拆开看全是这种特征词 数量词的组合。1.2 什么时候该想起正则正则不是所有文本处理问题的答案但它最擅长的场景非常明确我总结成四类批量搜索替换比如一篇文章里所有2024/1/5格式的日期要统一成2024-01-05纯手动改又慢又容易漏。数据清洗从乱七八糟的日志、导出文件里把手机号、邮箱、IP 地址等关键信息捞出来。格式校验前端表单里的邮箱、密码复杂度、身份证号是否符合规则这是很多后端服务的第一道防线。文本解析从一段结构不太规整的文本中提取结构化字段比如从错误日志里同时抓时间戳和错误码。判断标准很简单只要你想表达的是在文本中找某种模式而不是解析一棵树或计算一个值正则通常是性价比最高的方案。它不是万能的但它的适用面比大多数人以为的广得多。1.3 一个误解正则不是背出来的还有一个误区要专门说网上很多教程喜欢甩一张大而全的语法速查表看起来很干货实际对新手非常不友好。因为速查表只告诉你每个符号什么意思却没告诉你这些符号之间怎么配合。正真的学习路径应该是从任务到表达式给自己一个小任务比如从下面这段话里找出所有 QQ 号然后一步步构思数字怎么写、至少几位、前后边界怎么处理写出来再运行。等你积累了几十个这样的小任务语法自然内化成条件反射了。所以这篇文章后面不会按语法表的顺序讲而是按解决问题需要什么能力的顺序来讲。2. 地基构件普通字符、元字符与字符类2.1 普通字符匹配与元字符正则最基础的形态就是字面对照。你在正则里写cat它就去原文里找连续出现的cat这三个字母。这种写法跟文本编辑器里的查找功能完全一样没什么可讲的。真正让正则区别于普通查找的是一类特殊符号叫元字符。这类符号不再代表它们字面的样子而是代表某一类字符。我自己习惯把它们当成一种文本通配符来理解就像你在搜索框里按*代表任意内容一样只不过正则的规则更精确。最常用的一批我列个表格元字符含义例子效果.匹配任意单个字符换行符除外a.c可匹配abc、a1c、a_c\d匹配任意数字等价于[0-9]\d\d可匹配35、07\w匹配字母、数字、下划线\w\w可匹配ab、_1、A9\s匹配空白字符空格、Tab、换行a\sb可匹配a b、a加 Tab 加b\D匹配非数字\D可匹配a、#、空不能匹配5\W匹配非字母数字下划线\W可匹配#、空格不能匹配a、1\S匹配非空白字符\S可匹配a不能匹配空格需要强调的是大写形式是反向的意思很多新手在这里栽跟头\d是数字\D是非数字\w是单词字符\W是非单词字符。这个设计其实很符合直觉——同一对大小写一个管是一个管不是。2.2 字符类与反向字符类元字符解决的是某一类字符的匹配但有时候你想要的类很具体比如只要 a、b、c 三个字母中的任意一个或者只要是 A 到 Z 之间的字母。这时候就要用中括号[]它被称为字符类Character Class。中括号的使用逻辑跟点菜差不多[abc]表示从 a、b、c 这三样里任选一样[a-z]表示从字母 a 到 z 的范围里任选一样[a-zA-Z0-9_]则表示字母、数字、下划线都可以。把多个范围和单个字符写在一起完全没问题比如[a-zA-Z0-9]就是常见的英文大小写字母或数字。它的反向形式是在左中括号后紧跟一个^写成[^...]表示只要不是这里面任意一个都行。比如[^0-9]表示非数字字符。注意这个^放在中括号里面才是取反的意思放在正则最前面又是行首的意思初学者最容易在这个双重身份上晕头。判断方法很简单看它是不是紧跟[。字符类是实战里非常有用的工具我举一个场景提取一段文本里所有十六进制颜色值比如#FF6600。使用字符类的写法是#[0-9a-fA-F]{6}表示#后面跟恰好 6 个十六进制字符。先不急这里出现的{6}下一节马上讲。2.3 转义规则为什么容易乱接下来是正则新手第一个鬼门关转义。正则里的元字符如.*?()[]{}^$|\都有特殊含义但如果你要找的恰恰是它们本身比如匹配一个真正的句号.就需要在它前面加反斜杠\.告诉引擎这次我不要通配我要句号这个字面字符。为什么很多人觉得转义乱因为这里其实藏着两层逻辑。第一层是正则引擎的转义第二层是编程语言字符串的转义。以 Python 为例如果你要匹配字符串3.5 元里的那个点正则层面你得写\.而在 Python 字符串里\本身又需要转义写\\.两个反斜杠叠在一起很容易写错。解决办法就是用原生字符串r...这样写import re # 错误写法\d\. 中的 \. 在普通字符串里会被解释成什么容易出问题 # 正确写法r 前缀避免转义叠加 pattern r\d\.\d 元 text 苹果 3.5 元香蕉 2.8 元 print(re.findall(pattern, text)) # 结果[3.5 元, 2.8 元]我在刚开始写代码时就没少在这上面栽跟头后来养成了习惯凡是要在代码里写正则一律用原生字符串能省下大量莫名其妙的调试时间。这一点在后面第 6 节还会专门展开讲。3. 量与度的控制从匹配一个到匹配一串3.1 量词的作用方式只看上一章的语法你最多能匹配一个数字或三个字符但真实文本里数字的长度、单词的个数、空行的数量都是不确定的。正则解决这个问题靠的是量词用来描述前面的符号要出现几次。最常用的四个量词是*、、?和花括号。我先用表格把它们的底层含义说透量词含义类比例子*前面的字符出现 0 次或更多次可以没有也可以有一串a*可匹配空、a、aaa前面的字符出现 1 次或更多次至少要有一个a可匹配a、aaa不能匹配空?前面的字符出现 0 次或 1 次可有可无colou?r可匹配color和colour{n}前面的字符出现恰好 n 次精确数量\d{11}匹配 11 位数字{n,}前面的字符出现至少 n 次下限固定\d{3,}匹配至少 3 位数字{n,m}前面的字符出现 n 到 m 次区间范围\d{3,4}匹配 3 至 4 位数字很多新手在这里犯迷糊*和到底什么时候用哪个我自己的记忆方式是问自己一个问题这个特征允许不存在还是必须存在至少一个比如要匹配至少一个字母的单词用[a-zA-Z]要匹配前后可能有多余空格的一段数字空格用了*是因为可能没有空格数字用了是因为至少有一位数字。实战上最典型的一个场景是匹配国内常见的电话号码固话和手机混在一起时可以写\d{3,4}-\d{7,8}这是区号 3 到 4 位横杠号码 7 到 8 位的经典写法一眼就能看出量词怎么控制位数。3.2 贪婪与懒惰默认行为为何让人意外量词带来的最大坑不是符号记不住而是贪婪匹配这个默认行为。什么叫贪婪正则引擎在处理*、、{n,m}这类量词时会默认往右匹配尽可能多的字符然后再往回退看整个表达式能不能成立这个往回退的过程专业上叫回溯。说个最直观的例子。你要从一段 HTML 里提取a标签的href值文本是a hrefhttps://a.example.com链接一/a 和 a hrefhttps://b.example.com链接二/a如果正则写成a href(.*)你猜会匹配到什么因为.*贪婪它会一直吞到最后一个出现的地方才停所以括号里抓到的是https://a.example.com链接一/a 和 a hrefhttps://b.example.com整整一条长串根本不是你要的第一个链接。这就好比朋友问你要哪个苹果你说我要红的结果他把整筐红苹果都抱过来了。解决办法是让量词变懒惰写法就是在量词后加一个?.*?、.?。它的意思是能少匹配就少匹配每次只吃最少的内容一满足整体条件就停。同样的场景写成a href(.*?)就能老老实实只抓到https://a.example.com。这个知识点是正则从会写到能用的分水岭。我见过太多人写正则时被贪婪匹配搞得怀疑人生却不知道只需多加一个问号。同样适用于匹配引号里的内容.*?匹配注释\/\*.*?\*\/都是这个套路。凡是遇到两段边界之间夹着内容的场景优先考虑懒惰量词。4. 让匹配更准确锚点、分组与引用4.1 位置锚点匹配到地方不如匹配对地方量词解决了能匹配多长的问题但文本处理里还有个高频需求我不光要知道找什么还要知道找的内容必须出现在哪个位置。比如要从文本里找以 error 开头的行或者找以 .txt 结尾的文件名。这类需求靠位置锚点实现。最常用的三个锚点是^行首/字符串开头、$行尾/字符串结尾、\b单词边界。它们的共同特点是不消耗任何文本字符只检查当前位置是否满足条件。这个特性很难懂我给初学者打个比方锚点像酒店前台它不入住只负责核对你的身份核对通过才放你进去消费真正匹配的字符。举几个具体例子^ERROR # 匹配以 ERROR 开头的文本片段 \.txt$ # 匹配以 .txt 结尾的片段 \bcat\b # 匹配独立的单词 cat不会匹配 category 或 concat最后一个\b特别实用。如果你想在一篇英文文章里统计 cat 这个词出现的次数直接搜cat会把category、catalog、concatenate也搜出来但用\bcat\b因为\b要求左右两侧一边是单词字符、另一边不是单词字符于是category里的cat后面跟的是单词字符e就不满足边界条件。这里有个细节要注意^和$在默认情况下匹配的是整段文本的开始和结束而不是每一行。如果要对多行文本按行匹配需要开启多行模式常见写法(?m)或对应语言里的re.M/m修饰符这一点写日志解析类的脚本时特别容易忽略。4.2 分组捕获与反向引用括号()在正则里不只是改变优先级它更大的价值是捕获分组把一段匹配到的内容存下来供后续逻辑引用。一句话概括就是给匹配到的片段贴标签。举个最常见的日期格式转换例子。假设原文里全是2024-05-10你要统一改成05/10/2024。用分组的写法是(\d{4})-(\d{2})-(\d{2})这里三个括号分别捕获了年、月、日。在支持替换的引擎里你可以用$1、$2、$3不同语言语法略有差异有的用\1来引用它们替换表达式写成$2/$3/$1就能一键把2024-05-10变成05/10/2024。这个能力简直是批量文本整理的利器我做数据清洗时靠这一手省下的时间数都数不清。分组还有一个衍生功能叫反向引用作用是在后面的位置引用前面已经捕获到的内容。最经典的例子是检测连续重复的单词比如文本里手滑写出了 the the想排查出来\b(\w)\s\1\b先用\w捕获一个单词\s匹配空格\1引用前面捕获的单词要求后面再出现一模一样的词。这个技巧在文章校对、代码规范检查里相当好用。4.3 逻辑或与不捕获分组正则里的或用竖线|表示它连接几个分支只要有任意一个分支能匹配成功就算通过。比如匹配com、net、org三种域名后缀\.(com|net|org)$注意括号在这里很重要。如果写成\.com|net|org那或的优先级会凌驾于前面的.之上变成匹配.com或者net或者org语义完全变了。这里跟算术表达式很像括号优先级最高正则引擎会先处理括号里的内容。还有一种情况是你只需要用括号改变优先级但不想牺牲性能去捕获保存内容。这时可以用非捕获分组写法是在(后面加?:(?:https?|ftp)://它把三种协议头归为一组做逻辑或但又不会像捕获分组那样额外存一份匹配结果。在复杂的正则里多用一个非捕获分组能减少内存开销更重要的是避免分组编号被无关内容挤占干扰后面的反向引用。这是个重要的代码卫生习惯能用(?:)的地方就不用()。5. 进阶但必须掌握前瞻后顾与表达式结构5.1 断言只看位置不吃字符正则里有一类特殊结构叫零宽断言常见的就是前瞻(?...)、(?!...)和后顾(?...)、(?!...)。它们和锚点一样只检查当前位置周围的条件是否满足而不把匹配到的内容算进结果里——所以叫零宽意思是不占宽度。前面说过锚点像前台不入住断言也类似不过它的检查条件更复杂它要向前偷看或者向后偷看一截文本。比如你想在1000000这种长数字中找出千分位应该插入逗号的位置。这里先说一个简单应用匹配以符号后面跟着邮箱域名的部分但结果里不想要本身。用后顾断言写(?)[\w.-](?)的意思是当前位置前面必须是但这个不会被包含在匹配结果里。所以它能从userexample.com中直接提取出example.com干净利落。前瞻断言最常见的实战是密码强度校验。比如要求密码长度至少 8 位且必须同时包含字母和数字用前瞻可以写在一个表达式里^(?.*[A-Za-z])(?.*\d).{8,}$拆解一下(?.*[A-Za-z])表示从当前位置往后看必须能找到至少一个字母(?.*\d)表示必须能找到至少一个数字两个条件都满足后.{8,}才真正消耗掉这 8 位以上的字符。一个正则搞定多重条件的叠加校验这是别的方式很难写得这么优雅的。类似的(?!...)是负向前瞻表示后面不能出现什么比如排除不想要的单词。5.2 优先级与表达式结构写复杂正则时顺序和结构直接影响结果。正则在解析表达式时的优先级大致是括号()优先级最高接着是量词*、、?、{}然后是连接即按顺序连续写的多个元素最后才是或|。这跟数学里括号 乘法 加法的规则是一个思路。一旦你要写的正则有超过三个组成部分我强烈建议先写草稿把每个部分要解决的问题写清楚再合成一个表达式。你甚至可以借助在线可视化正则工具把表达式拆成语法树来看能直观看出哪个括号套哪个。我自己的习惯是分步验证先写最内层、最核心的匹配单元单独测试再往外包一层边界或锚点最后再加量词。每一步都跑一下用例比一次性拼一个二三十字符的长正则稳得多。5.3 什么时候别用正则说完了进阶技巧也得聊聊边界。正则再强它本质上也只能处理符合一定模式的文本也就是上下文无关、嵌套层次有限的文本。你如果尝试用正则去解析 HTML 或 JSON 这种有嵌套结构的东西就会陷入无穷无尽的边界修补中写出来的表达式自己也看不明白。一个典型的例子是匹配成对标签div.*?/div这段正则遇上嵌套的divdiv.../div/div就会出错因为正则没有记住嵌套深度的能力。业界有个段子你用正则解析 HTML遇到问题就会写第二个正则然后陷入正则的无限递归。我的建议是遇到这类结构化数据就果断换解析器正则只适合做线性文本里的模式匹配别硬扛。该让位的时候就让位这也是一种成熟。6. 实战中最容易翻车的几个点6.1 转义与字符串字面量的叠加问题学正则一段时间的同学往往会遇到一个诡异现象同样的表达式在在线测试工具里能用放进代码就报错或者匹配不上。十有八九是两层转义的问题。我把三种语言里最常见的写法整理成一张表方便对照想匹配的内容正则原文Python 写法JavaScript 写法数字加一个点\d\.\dr\d\.\d/\d\.\d/反斜杠本身\\r\\/\\\\/一个或多个汉字简版[\u4e00-\u9fa5]r[\u4e00-\u9fa5]/[\u4e00-\u9fa5]/Python 里用r前缀原样保留反斜杠是最大救星JavaScript 里直接用正斜杠包正则字面量一般不用考虑字符串层转义但一旦你用字符串new RegExp(\\d)动态构造正则反斜杠又要翻倍写。这个坑很隐蔽我见过有同事为此调试了大半天最后一查是字符串里\d被转义成了d。6.2 中文与\w的坑很多教程会说\w匹配字母、数字、下划线但没细说这个字母在不同语言里有完全不同的默认范围。在 JavaScript 环境中\w默认只匹配 ASCII 字符集里的[A-Za-z0-9_]中文属于非单词字符\w完全不会碰它但在 Python 3 里\w默认是 Unicode 感知的中文会被当成字母类字符被\w匹配到。这个差异导致同一个表达式换一门语言结果就变了。我建议在需要严格控制字符集合的场景不要依赖\w的默认语义直接写明确字符类。比如校验用户名只能包含英文、数字、下划线就写^[A-Za-z0-9_]$而匹配中文最常见的简版范围是[\u4e00-\u9fa5]注意它并不是全部汉字的完整范围但日常够用。如果你真要做严格的中文处理最好结合具体语言的正则文档确认 Unicode 属性写法不能想当然。6.3 贪婪回溯与匹配性能正则写得不小心还可能让程序卡死。罪魁祸首是灾难性回溯常见于嵌套量词。比如这个表达式(a)b在正常文本上跑得飞快但如果给它的是一串 aaaa... 后面没有b的文本正则引擎会尝试数不清的分割组合方式去匹配(a)每次回溯都多一种切法计算量指数级增长。如果待匹配文本很长程序可能直接长时间无响应。这类问题在写校验规则时特别容易踩中。我的几条经验第一能精确量词就少用嵌套的和*第二写复杂表达式后专门用应该匹配失败的边界文本做性能测试第三工具上可以开启正则的回溯超时警告或者使用不支持回溯的引擎。很多人以为正则性能问题离自己很远直到线上日志处理脚本突然卡死才会回头看那行从网上抄来的正则——这种经历一次就够长了记性。6.4 排查正则问题的思路碰到正则不工作别瞎改我按经验排个排查顺序把正则放到可视化工具里还有分组显示的测试工具一眼能看清每个括号捕获了什么。用一个最小样例复现把原文缩减到只包含目标内容的那一行先确认在最短路径上能不能匹配。检查量词模式优先怀疑贪婪匹配吞多了试试把.*换成.*?。检查锚点确认^、$在你当前的多行/单行模式下行为是否符合预期。检查转义在编程语言里打印出你传给正则引擎的实际字符串长什么样很多时候问题出在字符串层就已经变了。这一套流程我用了好多年90% 的正则 bug 都能在前三步解决。7. 可以直接抄的常用正则实例7.1 手机号、邮箱、十六进制颜色先上几个最常用的校验型表达式适合直接拿来改改用手机号中国 ^1[3-9]\d{9}$ 邮箱简版 ^[\w.-][\w-](\.[\w-])$ 十六进制颜色支持三位或六位 ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$手机号那条的含义是以 1 开头第二位是 3 到 9 的任意数字后面再接 9 位数字共 11 位。注意这只是常见格式业务上有更多前缀规则时要自行调整。邮箱那条是简版严格意义上的邮箱校验非常复杂这个能覆盖大多数正常输入但不可能覆盖所有国际化邮箱。十六进制颜色那条的关键是括号里的或结构{3}或{6}任选其一。这是使用交替分支 数量精确匹配的一个很标准的小例子。7.2 日志信息提取解析日志是正则的一大用武之地。假设有一行日志2024-05-10 15:22:33 ERROR 订单超时重试, 订单号: 1002345想同时提取时间、级别、订单号一个正则搞定^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\s([A-Z])\s.*订单号[:]\s*(\d)三个捕获组分别对应时间、日志级别、订单号。在支持命名分组的语言里比如 Python 的(?Pname...)我强烈建议给分组起名字比\1、\2可读性强得多^(?Ptime\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\s(?Plevel[A-Z])\s.*订单号[:]\s*(?Porder_id\d)为什么推荐命名分组因为日志格式复杂起来后分组数量一多用序号引用极易搞错而命名相当于给每个字段写了注释。我在处理几十个字段的日志解析时会用脚本自动生成正则结构图但平时能靠命名分组解决的问题尽量不让脚本上。7.3 文本替换类Markdown 链接转 HTML最后给一个常用但稍微进阶的替换例子把 Markdown 风格链接[文字](https://example.com)转成 HTML 的a href...文字/a。正则这么写\[([^\]])\]\(([^)])\)捕获组$1是链接文字$2是 URL。在大多数支持正则替换的工具里替换表达式写成a href$2$1/a就能全文批量替换。这里要留意的是\[和\]因为要匹配字面中括号所以必须转义而[^\]]表示除了右中括号以外的任意字符用这个负向字符类来取链接文字比用懒惰量词更稳。类似的套路在数据清洗、文档生成脚本中都用得上背后的思路其实是相通的把一段结构化文本拆成几个可命名的片段再按目标格式重排组合。8. 我怎么学正则以供参考8.1 任务驱动 vs 语法表驱动前面说过别死背语法表那具体怎么学我的方法很笨却很有效给自己布置一个真实需求清单。比如这周处理一个包含电话和邮箱的文本文件下周写一个从收藏夹导出的 HTML 文件里提取网址的小脚本再下周做一版密码强度校验的正则。每完成一个小任务就记录下这次用了哪些元字符、踩了什么坑。这个需求-表达式-收获的循环跑上几轮远比把教程从头翻到尾管用。因为任务驱动会强迫你完成描述特征 - 翻译语法 - 测试修正的完整闭环语法表驱动只是完成了其中翻译这一小步。8.2 工具与练习我不会推荐具体平台但一定要说清楚找一个可视化正则调试工具非常重要。这类工具通常能实时显示匹配结果、分组内容还能逐步骤展示引擎的匹配过程相当于给正则装了一个 X 光机。调试复杂的表达式时没有这种工具几乎是盲人摸象。练习的话除了自己造数据网上有很多正则相关的解谜练习题把正则当成闯关游戏来玩。这类练习的妙处在于题目会逼你思考边界条件比普通教程的例子刁钻得多。我自己的感受是玩过几十道题之后再看别人的长正则突然就像看结构化的句子而不是乱码了。8.3 沉淀自己的正则库最后分享一个坚持了很久的习惯我会把工作中写过的所有可复用正则集中存在一个文档里按用途分类——手机号校验、邮箱提取、URL 解析、日志采集、编码转换……每条后面附一行注释说明适用场景和坑点。写代码时先翻自己的库不仅能复用踩过坑的成熟写法还能在别人问起时直接给出经过验证的答案。这个文档现在已经有上百条了成了我最值钱的小抄。它让我不用把所有语法细节记在脑子里而是把精力省下来专注在这个需求该匹配什么模式这件事上。我现在写一个新正则的时候第一反应通常不是去翻语法表而是先问自己三个问题我要找的文本模式它的头和边界在哪它的身体允许有多少个字符它旁边有没有必须出现或禁止出现的邻居三个问题想清楚表达式基本就成型了。希望这篇教科书能帮你把正则从背符号变成一种真正掌握的表达方式。

相关新闻

住房证明(权利人查询)在线办理全攻略:从查询类型到验真避坑

住房证明(权利人查询)在线办理全攻略:从查询类型到验真避坑

简介:该PDF为2024年5月9日生成的权利人查询版住房证明,面向容森煜在东莞市的不动产登记信息核验,适合办理不动产查询、了解产权状态或审核房产备案情况的个人与机构使用。资源共1个文件,类型为PDF,压缩包大小约256KB&a…

2026/10/14 21:59:11 阅读更多 →
Swift 方法派发机制详解

Swift 方法派发机制详解

1. 引言 Swift 是一门兼具面向对象与函数式编程特性的语言,其方法派发(Method Dispatch)机制决定了调用一个方法时,运行时如何找到并执行对应的实现。理解方法派发不仅有助于写出高性能的代码,更是深入理解 Swift 运行…

2026/10/14 21:59:11 阅读更多 →
5分钟快速上手Chromex:Chrome Web Store安装到本地桥接注册的完整教程

5分钟快速上手Chromex:Chrome Web Store安装到本地桥接注册的完整教程

【免费下载链接】chromex A Codex-powered Chrome side-panel assistant for page context, tabs, voice, and image workflows. 项目地址: https://gitcode.com/gh_mirrors/chr/chromex 点击查看 免费下载 Chromex 是一个由 Codex 驱动的 Chrome 侧边栏助手&#…

2026/10/14 21:59:11 阅读更多 →

最新新闻

STM32U5xx HAL 驱动组件解析:在 Arduino_Core_STM32 中的角色、结构与配置

STM32U5xx HAL 驱动组件解析:在 Arduino_Core_STM32 中的角色、结构与配置

嵌入式固件驱动开发硬件开发 【免费下载链接】Arduino_Core_STM32 STM32 core support for Arduino 项目地址: https://gitcode.com/gh_mirrors/ar/Arduino_Core_STM32 点击查看 免费下载 STM32Cube 是意法半导体(STMicroelectronics)面向整…

2026/10/15 1:58:11 阅读更多 →
Python 3.13 异步上下文变量(contextvars)实战:全链路追踪 TraceID 的无损透传

Python 3.13 异步上下文变量(contextvars)实战:全链路追踪 TraceID 的无损透传

在分布式微服务架构与全链路可观测性(Observability)体系中,**全局链路追踪标识(TraceID)**是定位线上疑难杂症、还原请求拓扑调用链路的唯一黄金钥匙。无论一个 HTTP 请求深入穿透了多少层内部领域服务、发起了多少次…

2026/10/15 1:58:11 阅读更多 →
std::expected 与 monadic 操作链(and_then / or_else)实战:构建微秒级零异常错误管线

std::expected 与 monadic 操作链(and_then / or_else)实战:构建微秒级零异常错误管线

在现代低延迟系统、高频交易引擎以及 AI 推理服务的基础设施中,软件执行的吞吐与确定性时延(Deterministic Latency)是系统的生命线。长期以来,C 工程师在面对错误处理时总陷入两难困境:使用标准的 throw / catch 异常…

2026/10/15 1:58:11 阅读更多 →
【光学】基于matlab涡旋光旋转多普勒效应测速(花瓣模光束 + 任意入射条件下旋转物体转速探测)【含Matlab源码 16075期】

【光学】基于matlab涡旋光旋转多普勒效应测速(花瓣模光束 + 任意入射条件下旋转物体转速探测)【含Matlab源码 16075期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

2026/10/15 1:58:11 阅读更多 →
最新AI渗透收录【信矛 AI 自主渗透平台】

最新AI渗透收录【信矛 AI 自主渗透平台】

信矛AI自主渗透平台(SpearTrust):把年度项目制渗透,升级为常态化持续验证渗透测试报告会过期,业务风险不会等待。业务系统按天迭代,接口、权限和流程不断变化,一年一次的渗透测试难以回答&#…

2026/10/15 1:58:11 阅读更多 →
ECharts柱状图配置全解析:从基础到动态排序与性能优化

ECharts柱状图配置全解析:从基础到动态排序与性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:57:11 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →