<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>编程与计算机基础 on Laning's Blog</title><link>https://blog.laning.org/categories/%E7%BC%96%E7%A8%8B%E4%B8%8E%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/</link><description>Recent content in 编程与计算机基础 on Laning's Blog</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 10 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.laning.org/categories/%E7%BC%96%E7%A8%8B%E4%B8%8E%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello World</title><link>https://blog.laning.org/posts/2026-11-10-hello-world/</link><pubDate>Tue, 10 Nov 2026 00:00:00 +0000</pubDate><guid>https://blog.laning.org/posts/2026-11-10-hello-world/</guid><description>我的第一篇 Hugo 博客文章</description></item><item><title>异步函数async和await</title><link>https://blog.laning.org/posts/wp-0446/</link><pubDate>Thu, 10 Apr 2025 15:34:47 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0446/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;最近在回头看&lt;a href="https://github.com/laningya/nfd/blob/main/worker.js"&gt;nfd项目&lt;/a&gt; 的源码，看到了使用async和await的js代码，因此想了解一下代码运行的机制。&lt;/p&gt;
&lt;h2 id="一个例子"&gt;一个例子&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;function SicBo() {
return new Promise((resolve, reject) =&amp;gt; {
console.log(&amp;#34;开始摇&amp;#34;)
setTimeout(() =&amp;gt; {
let n = parseInt(Math.random() * 6 + 1, 10)
resolve(n)
}, 1000)
})
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="上述代码的执行过程如下"&gt;上述代码的执行过程如下：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;立即执行 &lt;code&gt;console.log(&amp;quot;开始摇&amp;quot;)&lt;/code&gt;&lt;/strong&gt; —— ✅ 马上输出。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动一个“1秒后执行的任务”&lt;/strong&gt; —— 通过 &lt;code&gt;setTimeout(...)&lt;/code&gt; 注册了一个回调，1 秒后执行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回一个 Promise 对象&lt;/strong&gt;，这个 Promise 会在 1 秒后变成“完成状态”并给出点数。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GPU在并行信息处理中的应用</title><link>https://blog.laning.org/posts/wp-0116/</link><pubDate>Mon, 19 Dec 2022 16:36:26 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0116/</guid><description>&lt;p&gt;摘要&lt;/p&gt;
&lt;p&gt;随着前端数据采集设备精度的不断提高，对信息处理系统的实时性、准确性提出更高的要求。而从日趋完善的计算机体系结构中，半导体工艺难以取得重大突破的情况下，想要获取更高的计算性能（信息处理能力），我们就必须探索另外一条道路——并行处理。GPU在应用于图像处理领用，其CUDA平台的支持，对于浮点运算的高效，因而作为并行信息处理的技术被广泛应用。&lt;/p&gt;</description></item><item><title>CSAPP学习笔记</title><link>https://blog.laning.org/posts/wp-0105/</link><pubDate>Thu, 14 Jul 2022 13:45:10 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0105/</guid><description>&lt;h1 id="深入理解计算机系统c语言数据结构微嵌编译原理数电模电"&gt;深入理解计算机系统（C语言、数据结构、微嵌、编译原理、数电、模电）&lt;/h1&gt;
&lt;h2 id="第一章计算机系统漫游"&gt;第一章：计算机系统漫游&lt;/h2&gt;
&lt;p&gt;编译系统&lt;/p&gt;
&lt;p&gt;hello.c-&amp;gt;hello.i&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -E hello.c -o hello.i
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.i-&amp;gt;hello.s&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -S hello.i -o hello.s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.s-&amp;gt;hello.o&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc -c hello.s -o hello.o
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hello.o-&amp;gt;hello&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gcc hello.o -o hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="第二章信息的表示和处理"&gt;第二章：信息的表示和处理&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//数据在不同架构处理器下的表示
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#include&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;typedef&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; byte_pointer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;(byte_pointer start, &lt;span style="color:#66d9ef"&gt;size_t&lt;/span&gt; led)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;size_t&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; ;i &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; led; i&lt;span style="color:#f92672"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;%.2x&amp;#34;&lt;/span&gt;,start[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_int&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_float&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;show_pointer&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;x)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_bytes&lt;/span&gt;((byte_pointer)&lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#66d9ef"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;12345&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;show_int&lt;/span&gt;(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="整数浮点数在计算机内部的表示与运算"&gt;整数、浮点数在计算机内部的表示与运算&lt;/h3&gt;
&lt;h2 id="第三章程序的机器级表示"&gt;第三章：程序的机器级表示&lt;/h2&gt;
&lt;h3 id="whiledo-whilefor性能分析"&gt;while、do-while、for性能分析&lt;/h3&gt;
&lt;p&gt;三种都是通过条件测试和跳转指令实现的。&lt;/p&gt;
&lt;h3 id="switchif-else性能分析"&gt;switch、if-else性能分析&lt;/h3&gt;
&lt;p&gt;switch通过一个跳转表实现，所以只需要执行一次跳转，而if-else需要多次跳转指令，代码效率相对低。&lt;/p&gt;</description></item><item><title>Python正则化</title><link>https://blog.laning.org/posts/wp-0102/</link><pubDate>Fri, 08 Jul 2022 10:42:23 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0102/</guid><description>&lt;h3 id="python正则化"&gt;Python正则化&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;符号&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;匹配任意字符&lt;/td&gt;
&lt;td&gt;b.t&lt;/td&gt;
&lt;td&gt;可以匹配bat / but / b#t / b1t等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\w&lt;/td&gt;
&lt;td&gt;匹配字母/数字/下划线&lt;/td&gt;
&lt;td&gt;b\wt&lt;/td&gt;
&lt;td&gt;可以匹配bat / b1t / b_t等 但不能匹配b#t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\s&lt;/td&gt;
&lt;td&gt;匹配空白字符（包括\r、\n、\t等）&lt;/td&gt;
&lt;td&gt;love\syou&lt;/td&gt;
&lt;td&gt;可以匹配love you&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\d&lt;/td&gt;
&lt;td&gt;匹配数字&lt;/td&gt;
&lt;td&gt;\d\d&lt;/td&gt;
&lt;td&gt;可以匹配01 / 23 / 99等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\b&lt;/td&gt;
&lt;td&gt;匹配单词的边界&lt;/td&gt;
&lt;td&gt;\bThe\b&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;匹配字符串的开始&lt;/td&gt;
&lt;td&gt;^The&lt;/td&gt;
&lt;td&gt;可以匹配The开头的字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;td&gt;匹配字符串的结束&lt;/td&gt;
&lt;td&gt;.exe$&lt;/td&gt;
&lt;td&gt;可以匹配.exe结尾的字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\W&lt;/td&gt;
&lt;td&gt;匹配非字母/数字/下划线&lt;/td&gt;
&lt;td&gt;b\Wt&lt;/td&gt;
&lt;td&gt;可以匹配b#t / b@t等 但不能匹配but / b1t / b_t等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\S&lt;/td&gt;
&lt;td&gt;匹配非空白字符&lt;/td&gt;
&lt;td&gt;love\Syou&lt;/td&gt;
&lt;td&gt;可以匹配love#you等 但不能匹配love you&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\D&lt;/td&gt;
&lt;td&gt;匹配非数字&lt;/td&gt;
&lt;td&gt;\d\D&lt;/td&gt;
&lt;td&gt;可以匹配9a / 3# / 0F等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;\B&lt;/td&gt;
&lt;td&gt;匹配非单词边界&lt;/td&gt;
&lt;td&gt;\Bio\B&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[]&lt;/td&gt;
&lt;td&gt;匹配来自字符集的任意单一字符&lt;/td&gt;
&lt;td&gt;[aeiou]&lt;/td&gt;
&lt;td&gt;可以匹配任一元音字母字符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[^]&lt;/td&gt;
&lt;td&gt;匹配不在字符集中的任意单一字符&lt;/td&gt;
&lt;td&gt;[^aeiou]&lt;/td&gt;
&lt;td&gt;可以匹配任一非元音字母字符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;匹配0次或多次&lt;/td&gt;
&lt;td&gt;\w*&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;匹配1次或多次&lt;/td&gt;
&lt;td&gt;\w+&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;匹配0次或1次&lt;/td&gt;
&lt;td&gt;\w?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{N}&lt;/td&gt;
&lt;td&gt;匹配N次&lt;/td&gt;
&lt;td&gt;\w{3}&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{M,}&lt;/td&gt;
&lt;td&gt;匹配至少M次&lt;/td&gt;
&lt;td&gt;\w{3,}&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{M,N}&lt;/td&gt;
&lt;td&gt;匹配至少M次至多N次&lt;/td&gt;
&lt;td&gt;\w{3,6}&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;|&lt;/td&gt;
&lt;td&gt;分支&lt;/td&gt;
&lt;td&gt;foo|bar&lt;/td&gt;
&lt;td&gt;可以匹配foo或者bar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?#)&lt;/td&gt;
&lt;td&gt;注释&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(exp)&lt;/td&gt;
&lt;td&gt;匹配exp并捕获到自动命名的组中&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?&amp;lt;name&amp;gt;exp)&lt;/td&gt;
&lt;td&gt;匹配exp并捕获到名为name的组中&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?:exp)&lt;/td&gt;
&lt;td&gt;匹配exp但是不捕获匹配的文本&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?=exp)&lt;/td&gt;
&lt;td&gt;匹配exp前面的位置&lt;/td&gt;
&lt;td&gt;\b\w+(?=ing)&lt;/td&gt;
&lt;td&gt;可以匹配I&amp;rsquo;m dancing中的danc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?&amp;lt;=exp)&lt;/td&gt;
&lt;td&gt;匹配exp后面的位置&lt;/td&gt;
&lt;td&gt;(?&amp;lt;=\bdanc)\w+\b&lt;/td&gt;
&lt;td&gt;可以匹配I love dancing and reading中的第一个ing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?!exp)&lt;/td&gt;
&lt;td&gt;匹配后面不是exp的位置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(?&amp;lt;!exp)&lt;/td&gt;
&lt;td&gt;匹配前面不是exp的位置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*?&lt;/td&gt;
&lt;td&gt;重复任意次，但尽可能少重复&lt;/td&gt;
&lt;td&gt;a.&lt;em&gt;b a.&lt;/em&gt;?b&lt;/td&gt;
&lt;td&gt;将正则表达式应用于aabab，前者会匹配整个字符串aabab，后者会匹配aab和ab两个字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+?&lt;/td&gt;
&lt;td&gt;重复1次或多次，但尽可能少重复&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;??&lt;/td&gt;
&lt;td&gt;重复0次或1次，但尽可能少重复&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{M,N}?&lt;/td&gt;
&lt;td&gt;重复M到N次，但尽可能少重复&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;{M,}?&lt;/td&gt;
&lt;td&gt;重复M次以上，但尽可能少重复&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="python对正则表达式的支持"&gt;Python对正则表达式的支持&lt;/h3&gt;
&lt;p&gt;Python提供了re模块来支持正则表达式相关操作，下面是re模块中的核心函数。&lt;/p&gt;</description></item><item><title>Markdown学习笔记</title><link>https://blog.laning.org/posts/wp-0097/</link><pubDate>Sat, 28 May 2022 19:32:57 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0097/</guid><description>&lt;h2 id="什么是markdown"&gt;什么是Markdown？&lt;/h2&gt;
&lt;p&gt;Markdown是一种轻量标记语言，可以转换为HTML文本，Github的README.md一般遵循Markdown语法规范。&lt;/p&gt;
&lt;h2 id="typora编辑器"&gt;Typora编辑器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Typora支持&lt;em&gt;&lt;strong&gt;跨平台&lt;/strong&gt;&lt;/em&gt;，支持Windows、MacOS、Linux&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Typora支持多种导出模式，可导出为多种PDF、Latex等&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>hello world!</title><link>https://blog.laning.org/posts/wp-0052/</link><pubDate>Tue, 30 Nov 2021 23:27:56 +0800</pubDate><guid>https://blog.laning.org/posts/wp-0052/</guid><description>&lt;pre tabindex="0"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
void main()
{
printf(&amp;#34;hello world\n&amp;#34;);
return;
}
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>