惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

博客园 - Bigben

foobar2000 sacd 和 生成文件名参考 windows激活 文本生成扩散模型示例/教学项目 从零开始构建一个基于Gemini 3的AI智能体 chromium Profiling 浏览器设置非隐身模式 香港高级音响展下载 2004-2024 香港高级视听展原音精选SACD 下载 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 小米刷机,降级,从14降到12.0.11触摸没反应又刷成12.5.6可以 c++协程原理刨析(asyncio 代码解析 c++20协程 网络库实现 coroutine) c代码自动生成类图 uml understand 对 uri分析获取mime type和 raw data download功能的下载注册与cdp 监听 Observer模式的很好示范 chrome headless启动 Image decoding on the web skia 中一个消息机制,单例的实现 SkMessageBus canvaskit.js 生成的 博文阅读密码验证 - 博客园
正则表达式笔记
Bigben · 2025-11-11 · via 博客园 - Bigben

在正则表达式中,*.*.*? 都是用来匹配重复字符的模式,但它们的作用和行为有重要的区别。


1. *:零次或多次重复 (Quantifier)

* 本身是一个量词,它必须作用于它前面的一个字符、字符集或捕获组。

符号 含义 匹配行为 示例
X* 零次或多次匹配前面的元素 X 这是最基本的重复量词。

查找 a*b

- 在 bbb 中匹配 b (a 出现 0 次)

- 在 aab 中匹配 aab (a 出现 2 次)

- 在 cbaaa 中不匹配

2. .*:贪婪匹配 (Greedy Matching)

.*. (点) 和 * (星号) 的组合,表示 匹配任何字符零次或多次。默认情况下,所有正则表达式的量词都是 贪婪(Greedy) 的。

符号 含义 匹配行为 示例
.* 贪婪匹配 任何字符 (.) 零次或多次 (*)。 匹配时会尽可能多地向右延伸,直到整个模式的其余部分仍然能够匹配成功为止。

查找 a.*c

- 在 a12b3c45c 中,它会匹配整个字符串 a12b3c45c。它会越过第一个 c,尽可能多地向右匹配。

3. .*?:非贪婪匹配 (Non-Greedy or Lazy Matching)

.*? 是在贪婪模式 .* 后面添加了一个问号 ?。问号在这里的作用是修饰量词,将其从贪婪模式切换到 非贪婪(Non-Greedy)懒惰(Lazy) 模式。

符号 含义 匹配行为 示例
.*? 非贪婪匹配 任何字符 (.) 零次或多次 (*)。 匹配时会尽可能少地向右延伸,只要满足整个模式的其余部分匹配成功即可。

查找 a.*?c

- 在 a12b3c45c 中,它只会匹配第一个最短的有效字符串:a12b3c。在匹配了第一个 c 之后就停止了。

总结和对比

特性 * (作用于前一个字符) .* (贪婪匹配) .*? (非贪婪匹配)
匹配内容 零次或多次重复前面的元素。 零次或多次重复 任何字符 零次或多次重复 任何字符
匹配倾向 取决于前面的元素,默认贪婪。 尽可能多 (最长匹配)。 尽可能少 (最短匹配)。
应用场景 匹配单个字符或集合的重复,如 \d* 匹配两个已知边界之间所有内容,如果边界是唯一的。 匹配两个 重复边界 之间最短的内容,如 HTML 标签 <tag>...</tag>

2,

调试正则表达式 (Find/Replace)

1. 转义特殊字符 (最常见的原因)

在正则表达式中,.()" 都是特殊字符。您必须使用反斜杠 \ 来转义它们,让它们匹配字面意义上的字符。

您的原始表达式 str((.*)).decode("raw_unicode_escape")
推荐的查找表达式 (转义后) str\((.*)\)\.decode\("raw_unicode_escape"\)

正确的替换表达式格式

IDE / 工具 格式 含义
PyCharm / IntelliJ strExt(\1) 推荐使用 \1
VS Code / Sublime strExt($1) 推荐使用 $1
Vim strExt(\1)strExt(\01)  
Standard Unix sed strExt(\1)