<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>自动机 on PlumePHP</title><link>https://plumephp.com/tags/%E8%87%AA%E5%8A%A8%E6%9C%BA/</link><description>Recent content in 自动机 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 28 Sep 2026 14:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E8%87%AA%E5%8A%A8%E6%9C%BA/index.xml" rel="self" type="application/rss+xml"/><item><title>正则引擎内部：从 Thompson 构造到回溯与 RE2 线性引擎</title><link>https://plumephp.com/others-regex-engine-internals/</link><pubDate>Mon, 28 Sep 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/others-regex-engine-internals/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;正则表达式人人会用，但「正则引擎是怎么把一段模式跑起来的」却是少数人才懂的底层知识。本文把正则引擎从「黑盒」拆成「电路图」：先讲正则 → 非确定有限自动机（NFA）的 &lt;strong&gt;Thompson 构造法&lt;/strong&gt;，再讲 NFA 的模拟运行（多状态并行的秘密），接着讲 NFA → DFA 的子集构造与状态爆炸，然后对比两条主要实现路线——&lt;strong&gt;回溯引擎&lt;/strong&gt;（Perl/PCRE/JS，快于小模式但可能灾难性回溯）与&lt;strong&gt;线性引擎&lt;/strong&gt;（RE2/ripgrep，永不回溯、线性时间但放弃向后引用），再讲向后引用为何让正则「不再是正则」，捕获组/锚点/环视的实现机制，最后给引擎选型与性能剖析的工程建议。读完你会明白：为什么 &lt;code&gt;(a+)+$&lt;/code&gt; 能卡死一个服务，以及为什么 RE2 声称「最坏也是线性」。&lt;/p&gt;</description></item></channel></rss>