Learn Some Basic Computer Skills for STEM Freshman
工科类专业-·-入学前5周计算机学习计划">工科类专业 · 入学前5周计算机学习计划
适用对象:计算机基础薄弱但希望提前衔接大学课程的准大学生
学习方向:工科类专业所需的计算机基础知识与技能
📋 修改历史
| 版本 | 日期 | 说明 |
|---|---|---|
| v1.4 | 2026-07-11 | 增加“附录-4:正则表达式入门” |
| v1.3 | 2026-07-09 | 增加“XMind” in “桌面常用软件” 增加“附录-3: CPU Arch & OS” |
| v1.2 | 2026-07-04 | 增加“桌面常用软件” |
| v1.1 | 2026-07-02 | 增加“AI通识学习” |
| v1.0 | 2026-06-29 | 初始版本 |
📋 总体目标
| 目标 | 说明 |
|---|---|
| 掌握编程基础 | 以 C 语言和python为主 |
| 掌握Linux基础 | 以树莓派4为平台,熟悉Linux操作系统 |
| 熟悉开发工具链 | Git、IDE、命令行等常用工具 |
💻 所需设备清单
必备设备
| 设备 | 规格要求 | 用途说明 |
|---|---|---|
| 电脑/笔记本 | Windows 10/11 系统,8GB+内存 | 主要学习设备,安装VSCode等工具 |
| 树莓派4 | 4GB 或 8GB 内存版本 | Linux学习与开发平台 |
| SD卡 | 32GB 以上(Class 10 或 U3) | 树莓派操作系统存储 |
| 树莓派散热套装 | 散热片 + 风扇(或铝合金外壳) | 保证树莓派稳定运行 |
| 树莓派电源 | 5V/3A USB-C | 建议使用官方电源适配器 |
| 键鼠套装 | 普通USB键鼠即可 | 初始配置树莓派时使用 |
| 显示器 | HDMI接口(或转接头) | 初始配置时使用,后续可用SSH |
网络设备
| 设备 | 用途说明 |
|---|---|
| 路由器 | 提供局域网环境,连接树莓派和电脑 |
| 网线(可选) | 有线连接更稳定,适合SSH开发 |
配件参考价格
| 配件 | 参考价格 |
|---|---|
| 树莓派4 4GB | 约 300-400 元 |
| 树莓派4 8GB | 约 500-600 元 |
| 32GB SD卡 | 约 30-50 元 |
| 散热套装 | 约 20-40 元 |
| 官方电源 | 约 50-80 元 |
| 外壳 | 约 30-100 元 |
提示:可购买树莓派4入门套装(含外壳、散热、电源、SD卡),京东/淘宝价格约 400-600 元
📅 分周计划
第1周:计算机基础与高效使用
目标:熟悉电脑性能优化、效率工具,为后续编程学习打下基础
| 日期 | 学习内容 | 推荐资源 |
|---|---|---|
| 第1-2天 | 电脑基础操作:文件管理、磁盘清理、快捷键 | 哔哩哔哩「电脑基础操作」 |
| 第3天 | 学会使用 Markdown 写作(Typora / VS Code) | 哔哩哔哩「Markdown教程」 |
| 第4天 | 常用网络账号注册(Gmail / Apple ID / GitHub / Cloudflare) | 各平台官网 |
| 第5天 | 密码管理软件学习(Bitwarden 免费开源) | Bitwarden官网 |
| 第6天 | 了解计算机硬件基础(CPU/内存/硬盘/主板) | 哔哩哔哩「计算机硬件基础」 |
| 第7天 | 搭一个自己的学习环境(分类文件夹、常用软件安装) | 自行摸索 |
本周成果:完成一份 Markdown 格式的自我介绍
第2周:编程入门 —— C语言(一)
目标:建立编程思维,掌握 C 语言基本语法
| 日期 | 学习内容 | 推荐资源 |
|---|---|---|
| 第1-2天 | 什么是编程、C语言简介、第一个程序「Hello World」 | 鱼C工作室 |
| 第3-4天 | 变量与数据类型、输入输出(printf / scanf) | 浙大翁恺C语言 |
| 第5-6天 | 条件语句(if / switch)、循环(while / for) | 浙大翁恺C语言 |
| 第7天 | 练习:写一个猜数字游戏 | 自行实践 |
猜数字游戏需求:
- 程序随机生成 1~100 的整数
- 用户通过键盘输入猜测的数字
- 程序根据猜测给出提示(”太大了” / “太小了” / “恭喜猜中!”)
- 限制最多猜测 7 次,超出则游戏失败
- 猜中后显示用户共猜了多少次
- 支持游戏结束后选择重新开始或退出
本周成果:编写一个完整的猜数字程序
推荐书籍(PDF可在Z-Library下载):
- 《C Primer Plus》第5/6版
- 《啊哈C语言》适合完全零基础
第3周:编程入门 —— C语言(二)
目标:掌握函数、数组和指针(指针是C语言核心,也是电类专业重点)
| 日期 | 学习内容 | 推荐资源 |
|---|---|---|
| 第1-2天 | 函数(定义、调用、参数传递) | 浙大翁恺C语言 |
| 第3-4天 | 数组(一维数组、二维数组) | 浙大翁恺C语言 |
| 第5-6天 | 指针基础(地址、指针变量、指针与数组) | 浙大翁恺C语言 |
| 第7天 | 综合练习:用指针处理数组 | 洛谷 / Codeforces |
本周成果:能理解并使用指针操作数组
第4周:Python基础 + 树莓派4 / Linux入门
目标:拓宽编程视野 + 接触电子信息专业的软件工具
| 日期 | 上午(2-3小时) | 下午(2-3小时) |
|---|---|---|
| 第1天 | Python环境搭建(Python 3.x / PyCharm) | Python基本语法、print、变量 |
| 第2天 | 列表、字典、条件与循环 | 用Python做简单计算 |
| 第3天 | 树莓派4环境搭建(系统烧录、SSH连接、散热和外壳) | 哔哩哔哩「树莓派入门」 |
| 第4天 | 树莓派OS基础(文件系统、远程连接、Vim编辑器) | 树莓派官方文档 |
| 第5天 | Shell基础命令(ls / cd / mkdir / grep / pip / chmod) | 哔哩哔哩「Linux常用命令」 |
| 第6天 | Linux文本处理(cat / grep / sed / awk / 管道) | Linux命令练习 |
| 第7天 | Linux用户权限与进程管理(useradd / sudo / ps / kill) | 哔哩哔哩「Linux权限管理」 |
本周成果:在树莓派上完成SSH远程访问和简单服务器搭建
软件获取渠道:
| 软件 | 获取方式 |
|---|---|
| 树莓派4 | 官网或京东/淘宝购买(约300-500元,含外壳散热) |
| 树莓派Imager | 官网免费下载 |
| Python | 官网免费下载 |
| PyCharm | 官网(社区版免费) |
| VSCode | 官网(远程SSH插件支持) |
第5周:GitHub + AI工具入门
目标:掌握版本控制工具,学习使用AI辅助编程工具
| 日期 | 学习内容 | 推荐资源 |
|---|---|---|
| 第1-2天 | Git版本控制入门(什么是Git、仓库创建) | 廖雪峰Git教程 |
| 第3-4天 | GitHub使用(注册账号、创建仓库、提交代码) | GitHub官网 |
| 第5-6天 | 整理前4周的学习笔记和代码(Markdown汇总) | 回顾+总结 |
| 第7天 | 常用AI Agent安装与使用(Codex / Reasonix) | Codex官网 / Reasonix官网 |
本周成果:在GitHub上创建个人仓库并提交代码
📚 推荐学习资源汇总
哔哩哔哩(视频学习)
| 方向 | 推荐UP主/课程 |
|---|---|
| C语言 | 浙大翁恺C语言、鱼C工作室 |
| Python | 鱼C工作室、小甲鱼Python |
| 树莓派4 / Linux | 树莓派官方文档、稚晖君 |
| Git/GitHub | 廖雪峰Git教程、GitHub官网 |
| Linux | 韩顺平Linux |
GitHub 资源
| 仓库名 | 内容 |
|---|---|
| awesome-cs-books | 计算机经典书籍合集 |
| awesome-courses | 全球顶尖大学课程 |
| free-programming-books | 免费编程书籍 |
| project-based-learning | 项目驱动学习 |
网站与工具
| 类型 | 推荐 |
|---|---|
| 刷题平台 | 洛谷(适合初学者)、LeetCode |
| 编程练习 | 洛谷、牛客网 |
| 文档查询 | cppreference(C语言官方文档) |
| Linux学习 | Linuxize、菜鸟教程Linux |
| AI编程助手 | Codex 、Reasonix |
| AI通识学习 | 高校“动手学AI”人工智能通识与实践 |
| 开发者社区 | CSDN、掘金、Stack Overflow(英文) |
| 密码管理 | Bitwarden(免费开源) |
⚠️ 重要提示
- 动手 > 听课:看10遍视频不如亲手写一遍代码,务必保证每天coding时间
- 英语很重要:很多优质资料是英文的,建议逐渐适应阅读英文文档
- 数学不能丢:电子信息专业对数学要求较高,假期可复习高数/线代
- 善用搜索引擎:遇到问题先搜索(Google/必应),再问人
- 加入学长群:获取第一手学习经验和软件资源
🎯 5周后预期收获
- ✅ 能独立编写C语言程序(数组、函数、指针)
- ✅ 会用Git管理自己的代码
- ✅ 有自己的GitHub主页
- ✅ 掌握树莓派4和Linux基础操作
- ✅ 会使用AI辅助编程工具提升学习效率
祝大学生活顺利!
制定日期:2026年6月29日
附录-1:Windows + VSCode 远程连接树莓派4 开发环境搭建
一、树莓派4 准备工作
1.1 安装树莓派OS
- 在Windows电脑上下载 树莓派Imager
- 插入SD卡,运行Imager
- 选择设备:
Raspberry Pi 4 - 选择操作系统:
Raspberry Pi OS (64-bit)(推荐) - 选择存储卡,点击
烧录 - 烧录完成后,将SD卡重新插入电脑
1.2 开启SSH和配置WiFi(无显示器_setup)
在SD卡的 boot 分区根目录下创建两个文件:
文件1:ssh(空文件,无扩展名)
1 | |
文件2:userconf.txt(设置初始用户)
1 | |
默认用户 pi,密码 raspberry
文件3:wpa_supplicant.conf(配置WiFi)
1 | |
1.3 启动树莓派
- 将SD卡插入树莓派
- 通电开机,等待约1-2分钟
- 登录路由器后台查看树莓派获得的IP地址(如:192.168.1.100)
二、树莓派4 安装gcc和git
2.1 SSH连接树莓派
在Windows PowerShell或CMD中执行:
1 | |
2.2 更新软件源并安装工具链
1 | |
2.3 创建开发目录
1 | |
三、Windows VSCode 远程连接配置
3.1 安装VSCode
- 下载 VSCode for Windows
- 安装时勾选「添加到PATH」和「通过Code打开」
3.2 安装Remote SSH扩展
- 打开VSCode
- 按
Ctrl+Shift+X打开扩展市场 - 搜索
Remote - SSH并安装(由Microsoft提供) - 搜索
C/C++并安装(由Microsoft提供)
3.3 配置SSH连接
- 按
Ctrl+Shift+P打开命令面板 - 输入
Remote-SSH: Open Configuration File - 选择
~/.ssh/config - 添加以下内容:
1 | |
3.4 连接树莓派
- 按
Ctrl+Shift+P - 输入
Remote-SSH: Connect to Host - 选择
raspberrypi - 输入密码:
raspberry - 连接成功后,左下角显示
><> SSH: raspberrypi
四、在VSCode中编写C语言程序
4.1 创建第一个C程序
- 在VSCode中按
Ctrl+O打开文件夹 - 连接到树莓派后,选择
/home/pi/c-practice目录 - 按
Ctrl+N新建文件,保存为hello.c
1 | |
4.2 编译运行
在VSCode终端(`Ctrl+``)中执行:
1 | |
4.3 使用Git管理代码
1 | |
五、常见问题排查
| 问题 | 解决方法 |
|---|---|
| SSH连接被拒绝 | 确认SSH文件存在且树莓派已联网 |
| 找不到gcc | 执行 sudo apt install gcc 重新安装 |
| VSCode远程卡顿 | 检查网络延迟,尝试使用有线连接 |
| Git推送失败 | 确认GitHub账号已添加SSH公钥 |
六、推荐:VSCode必装扩展(远程端)
在树莓派连接状态下,安装以下扩展提升体验:
- C/C++ - C语言智能提示和调试
- Bracket Pair Colorizer - 括号高亮配对
- vscode-icons - 文件图标美化
- One Dark Pro - 主题配色
附录-2: 桌面常用软件
| 序号 | 类型 | 软件名称 | 功能简介 | 官方网站 | 是否免费 | 自启动建议 |
|---|---|---|---|---|---|---|
| 1 | 开发工具 | VS Code | 微软出品的代码编辑器,丰富插件生态 | code.visualstudio.com | 是 | No |
| 2 | 开发工具 | Notepad++ | 轻量级代码和文本编辑器,支持多语言高亮 | notepad-plus-plus.org | 是(开源) | No |
| 3 | 开发工具 | Python | 通用编程语言 | python.org | 是(开源) | No |
| 4 | 开发工具 | Git | 分布式版本控制系统 | git-scm.com | 是(开源) | No |
| 5 | 开发工具 | Meld | 可视化文件差异对比和合并工具 | meldmerge.org | 是(开源) | No |
| 6 | 开发工具 | WSL | Windows 下的 Linux 子系统 | learn.microsoft.com/wsl | 是 | No |
| 7 | 开发工具 | Warp | AI 驱动的现代终端模拟器 | warp.dev | 部分免费 | No |
| 8 | 开发工具 | MobaXterm | 增强型远程终端工具(支持 SSH/SFTP/X11) | mobaxterm.mobatek.net | 部分免费 | No |
| 9 | 开发工具 | Claude Code CLI | Anthropic 出品的 AI 编程命令行助手 | claude.com/claude-code | 免费(按 Token 计费) | No |
| 10 | 开发工具 | CC Switch | Claude Code 模型/API 切换工具 | CC Switch | 是(开源) | Yes |
| 11 | 效率工具 | Everything | 极速本地文件和文件夹搜索工具 | voidtools.com | 是 | Yes |
| 12 | 效率工具 | LocalSend | 免费开源局域网跨平台文件传输工具 | localsend.org | 是(开源) | No |
| 13 | 效率工具 | FluentCleaner | WinUI 3 的 Windows 系统清理工具,支持社区维护的清理规则数据库 | builtbybel/FluentCleaner | 是(开源) | No |
| 14 | 效率工具 | Pixpin | 截图、贴图、长截图、OCR文字识别 | pixpin.cn | 是 | Yes |
| 15 | 效率工具 | Ditto | 剪贴板管理,保存和快速检索历史记录 | ditto-cp.sourceforge.io | 是(开源) | Yes |
| 16 | 效率工具 | Listary | 文件快速搜索和启动工具 | listary.com | 部分免费 | Yes |
| 17 | 效率工具 | Auto Hot Key (AHK) | 自动化脚本和快捷键自定义 | autohotkey.com | 是(开源) | Yes |
| 18 | 效率工具 | 7-zip | 开源文件压缩/解压工具 | 7-zip.org | 是(开源) | No |
| 19 | 效率工具 | PDF-Xchange Editor | PDF 阅读、编辑和注释工具 | pdf-xchange.com | 部分免费 | No |
| 20 | 效率工具 | Draw.IO | 在线流程图和图表绘制工具 | drawio.com | 是 | No |
| 21 | 办公应用 | Obsidian | 基于 Markdown 的知识管理和笔记软件 | obsidian.md | 是(个人) | Yes |
| 22 | 办公应用 | Typora | 所见即所得的 Markdown 编辑器 | typora.io | 否 | No |
| 23 | 办公应用 | Word | 文字处理和文档编辑 | microsoft.com/word | 否 | No |
| 24 | 办公应用 | XMind | Mindmap(思维导图)编辑 | 免费下载 Xmind 思维导图 | 是(个人部分功能免费) | No |
| 25 | 办公应用 | Excel | 电子表格和数据分析 | microsoft.com/excel | 否 | No |
| 26 | 办公应用 | PowerPoint | 演示文稿制作 | microsoft.com/powerpoint | 否 | No |
| 27 | 办公应用 | Outlook | 电子邮件和日历管理 | microsoft.com/outlook | 部分免费 | Yes |
| 28 | 社交通讯 | 微信 | 即时通讯、文件传输 | weixin.qq.com | 是 | Yes |
| 29 | 社交通讯 | 飞书 | 协作办公平台(文档、会议、消息) | feishu.cn | 是 | Yes |
| 30 | 开发工具 | The Silver Searcher (ag) | 超快的代码搜索工具,比 grep 更快,支持 .gitignore 规则 | github.com/ggreer/the_silver_searcher | 是(开源) | No |
附录-3: CPU Arch & OS
附录-4:正则表达式入门
一、什么是正则表达式
正则表达式(Regular Expression,常缩写为 Regex 或 RegExp)是一种描述文本模式的语言。它不是某一种编程语言,而是一套用于搜索、匹配、提取、替换和校验文本的规则。
例如,普通搜索只能查找固定文本 cat;正则表达式 c[aeiou]t 则可以匹配 cat、cet、cit、cot 和 cut。正则表达式常见于:
- VS Code、Notepad++ 等编辑器的查找与替换
- Linux 命令
grep、sed和awk - Python、JavaScript、Java、C# 等编程语言
- 日志分析、数据清洗、表单校验和批量修改文件
正则表达式适合处理具有明确规律的文本,但不适合完整解析 HTML、JSON 或复杂程序代码;这些场景通常应使用专门的解析器。
二、最常用的语法
以下语法是多数现代正则引擎都支持的常用部分。表中的“匹配”指字符串中满足规则的内容,而不一定是整个字符串。
| 语法 | 含义 | 示例 | 可以匹配 |
|---|---|---|---|
abc |
普通字符按原样匹配 | cat |
cat |
. |
除换行符外的任意单个字符(通常如此) | c.t |
cat、c9t |
[abc] |
字符集合中的任意一个字符 | gr[ae]y |
gray、grey |
[^abc] |
不在集合中的任意一个字符 | [^0-9] |
任意非数字字符 |
[a-z] |
指定范围内的一个字符 | [A-Za-z] |
一个英文字母 |
\d |
一个数字;不同引擎对非 ASCII 数字的处理可能不同 | \d\d |
42 |
\w |
一个“单词字符”;字符范围随引擎和 Unicode 模式而变化 | \w+ |
hello_2 |
\s |
一个空白字符 | A\s+B |
A B、A\tB |
\D、\W、\S |
分别是 \d、\w、\s 的反义 |
\D+ |
连续的非数字字符 |
^ |
字符串或行的开头 | ^Error |
行首的 Error |
$ |
字符串或行的结尾 | ;$ |
行尾的分号 |
\b |
单词边界 | \bcat\b |
独立单词 cat,不匹配 catalog |
* |
前一项重复 0 次或多次 | ab*c |
ac、abc、abbc |
+ |
前一项重复 1 次或多次 | ab+c |
abc、abbc |
? |
前一项重复 0 次或 1 次 | colou?r |
color、colour |
{m} |
前一项恰好重复 m 次 | \d{4} |
2026 |
{m,n} |
前一项重复 m 至 n 次 | \d{2,4} |
12、2026 |
A|B |
匹配 A 或 B | cat|dog |
cat 或 dog |
(abc) |
捕获分组,将多项视为一个整体并保存匹配结果 | (ab)+ |
ab、abab |
(?:abc) |
非捕获分组,只分组而不保存结果 | (?:ab)+ |
ab、abab |
\1 |
反向引用第 1 个捕获组 | \b(\w+)\s+\1\b |
the the |
\. |
转义元字符,匹配字面量 . |
example\.com |
example.com |
正则中的常见元字符包括:
1 | |
要匹配这些符号本身,通常需要在前面加反斜杠。例如 \+ 匹配加号,\( 匹配左括号。
三、从简单例子开始
3.1 查找连续数字
1 | |
在文本 Room 305, Building 7 中会匹配 305 和 7。其中 \d 表示数字,+ 表示一个或多个。
3.2 校验中国大陆手机号码的基本格式
1 | |
^和$要求整个字符串都符合规则1要求第一位是 1[3-9]要求第二位是 3 至 9\d{9}要求后面恰好有 9 位数字
这只能校验基本格式,不能证明号码真实存在,也不代表号段规则永远不变。
3.3 提取日期的各个部分
1 | |
匹配 2026-07-11 后,第 1、2、3 个捕获组分别是 2026、07、11。在替换文本中,不同工具可能使用 $1、\1 或其他写法引用这些组。
3.4 批量交换“姓, 名”
原始文本:
1 | |
查找:
1 | |
替换(VS Code / JavaScript 常用写法):
1 | |
结果:
1 | |
3.5 用 Python 提取邮箱地址
1 | |
这里使用 Python 的原始字符串 r"...",可以减少反斜杠的重复转义。这个表达式适合一般文本提取,但不是对电子邮箱标准的完整实现。
3.6 用 grep 筛选日志
1 | |
-E 表示使用 POSIX ERE(扩展正则表达式),该命令会输出以 ERROR 或 WARN 开头的行。
四、分组、断言和匹配模式
4.1 捕获组与命名组
圆括号 (pattern) 不仅改变运算范围,还会保存匹配结果。现代引擎通常还支持命名组,但语法并不统一:
1 | |
上面是 JavaScript、.NET 等引擎常见的命名形式;Python 常写成 (?P<year>\d{4})。
4.2 前瞻与后顾
断言只检查某个位置的前后是否符合条件,不把被检查的文字包含进最终匹配结果。
| 语法 | 名称 | 示例 | 含义 |
|---|---|---|---|
(?=...) |
正向前瞻 | \d+(?=元) |
匹配后面紧跟“元”的数字 |
(?!...) |
负向前瞻 | foo(?!bar) |
匹配后面不是 bar 的 foo |
(?<=...) |
正向后顾 | (?<=¥)\d+ |
匹配前面紧跟 ¥ 的数字 |
(?<!...) |
负向后顾 | (?<!-)\d+ |
匹配前面不是减号的数字 |
POSIX BRE/ERE 不支持这些断言;某些旧版工具或引擎也不支持后顾。
4.3 常用标志(Flags)
| 标志 | 常见名称 | 作用 |
|---|---|---|
i |
ignore case | 忽略英文字母大小写 |
m |
multiline | 让 ^ 和 $ 匹配每一行的开头和结尾 |
s |
dotall / singleline | 让 . 也能匹配换行符 |
g |
global | 查找全部匹配,而不是只找第一个(常见于 JavaScript 和编辑器) |
x |
verbose / free-spacing | 允许加入空白和注释以提高可读性;并非所有引擎都支持 |
标志的开启方式取决于环境,例如 JavaScript 写作 /error/gi,Python 写作 re.findall(pattern, text, re.I)。
五、贪婪与懒惰匹配
*、+、? 和 {m,n} 默认通常是贪婪的,即在仍能完成整体匹配的前提下尽量多匹配字符。
文本:
1 | |
<b>.*</b>会从第一个<b>一直匹配到最后一个</b><b>.*?</b>使用懒惰量词*?,会分别匹配两个较短片段<b>[^<]*</b>明确限制内容不能含<,通常更清晰
POSIX 正则没有
*?这种懒惰量词。并且真实 HTML 结构可能嵌套或包含特殊情况,应优先使用 HTML 解析器。
六、主要正则规范和引擎的差别
“正则表达式”并非只有一种完全统一的语法。应先确认当前工具使用哪一种规范或正则引擎。
| 特性 | POSIX BRE | POSIX ERE | JavaScript | Python re |
PCRE / PCRE2 | .NET |
|---|---|---|---|---|---|---|
| 常见环境 | grep 默认、部分 sed |
grep -E、awk |
浏览器、Node.js | Python | PHP、部分工具 | C#、PowerShell |
| `+ ? | ( )` | POSIX BRE 不提供 +、?、` |
;分组写作 ( )。GNU grep 另扩展了 +、?、|` |
直接作为元字符 | 支持 | 支持 |
\d、\w、\s |
不属于 POSIX 标准 | 不属于 POSIX 标准 | 支持 | 支持 | 支持 | 支持 |
POSIX 字符类 [[:digit:]] |
支持 | 支持 | 通常不支持 | 不支持 | 部分模式支持 | 通常不支持 |
非捕获组 (?:...) |
不支持 | 不支持 | 支持 | 支持 | 支持 | 支持 |
| 前瞻 | 不支持 | 不支持 | 支持 | 支持 | 支持 | 支持 |
| 后顾 | 不支持 | 不支持 | 现代版本支持,细节受实现影响 | 支持,但通常要求固定长度 | 支持,能力依版本而异 | 支持,长度限制与其他引擎不同 |
| 命名组 | 不支持 | 不支持 | (?<name>...) |
(?P<name>...) |
支持多种形式 | (?<name>...) |
| 模式内标志 | 不支持 | 不支持 | 通常在 /.../flags 外部指定 |
(?i) 等 |
(?i) 等 |
(?i) 等 |
| 匹配原则 | 左最先、最长匹配 | 左最先、最长匹配 | 左最先,按回溯路径决定 | 左最先,按回溯路径决定 | 左最先,按回溯路径决定 | 左最先,按回溯路径决定 |
几个最容易遇到的差异如下:
- grep 的两套语法:
grep默认使用 BRE;需要+、?、|和普通括号时,初学者通常使用grep -E更直观。 - 字符类别并不完全等价:在某些 Unicode 引擎中,
\d能匹配多种语言的数字,\w也可能包含 Unicode 字母;JavaScript 中的\d和\w通常更接近 ASCII 范围。若只允许 ASCII,可明确写[0-9]和[A-Za-z0-9_]。 - 字符串还会再转义一次:正则本身的
\d放进某些编程语言的普通字符串时,可能要写成"\\d"。Python 可使用r"\d";JavaScript 正则字面量可写/\d/。 - 替换语法不同:VS Code、JavaScript 和 .NET 常用
$1;Pythonre.sub常用\1或更明确的\g<1>;具体应查当前工具文档。 - 换行符有平台差异:Windows 文本常使用
\r\n,Linux 常使用\n。需要同时兼容时可写\r?\n。
七、常用正则速查
| 需求 | 示例表达式 | 备注 |
|---|---|---|
| 只包含 ASCII 数字 | ^[0-9]+$ |
至少一位数字 |
| 简单整数 | ^[+-]?[0-9]+$ |
可带正负号 |
| 简单小数 | `^[+-]?(?:[0-9]+(?:.[0-9]*)? | .[0-9]+)$` |
| 4 位年份 | `^(?:19 | 20)[0-9]{2}$` |
YYYY-MM-DD 外形 |
`^[0-9]{4}-(?:0[1-9] | 1[0-2])-(?:0[1-9] |
| IPv4 外形 | ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$ |
未限制每段必须为 0—255 |
| 十六进制颜色 | ^#[0-9A-Fa-f]{6}$ |
如 #1E90FF |
| 行首或行尾空白 | `^\s+ | \s+$` |
| 连续重复单词 | \b(\w+)\s+\1\b |
是否忽略大小写取决于标志 |
| Markdown 标题 | ^#{1,6}\s+.+$ |
需多行模式 |
这些表达式主要用于学习和常见数据清洗。日期、IP 地址、URL、邮箱等真实业务规则往往比表面格式复杂;重要数据应在正则匹配后继续进行程序校验。
八、学习和调试建议
- 先用普通文本写出要找的固定部分,再逐步替换为字符类和量词。
- 使用
^和$区分“整个字符串必须符合规则”与“字符串中存在一段匹配”。 - 为每个表达式准备应当匹配和不应当匹配的测试样例。
- 长表达式尽量拆分、加注释,或使用引擎支持的 verbose 模式。
- 避免无约束地叠加
.*、(.+)+等结构,它们可能造成严重回溯和性能问题。 - 从网络复制正则后,要确认其目标引擎、字符编码、标志和输入边界,不要直接用于重要数据。
学习正则表达式最有效的方法不是背下所有语法,而是从编辑器的“使用正则表达式查找”开始,针对真实文本不断编写、测试和修改。