<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[简单入门]什么是贪婪与非贪婪模式什么是贪婪与非贪婪模式，Go语言简单理解。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 17 Oct 2012 03:10:41 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	对，你理解得对！在正则里，`.*` 默认是 **贪婪模式**，会尽可能多地匹配字符。如果你想让它 **非贪婪**（尽可能少匹配），需要在 `*` 或 `+` 后面加一个 `?`。<br/><br/>---<br/><br/>### 示例<br/><br/>```go<br/>// 原来的贪婪模式<br/>regexp.MustCompile(`^[0-9]+.*-`)<br/><br/>// 非贪婪模式，只匹配到第一个 -<br/>regexp.MustCompile(`^[0-9]+.*?-`)<br/>```<br/><br/>* `.*?` → 匹配任意字符，但尽量少匹配（非贪婪）<br/>* `+?` → 匹配 1 个或多个字符，但尽量少匹配（非贪婪）<br/>* 位置：问号紧跟在 `*` 或 `+` 后面<br/><br/>---<br/><br/>### 对比<br/><br/>```go<br/>s := &quot;12.技术研发中心-数字人智能体V1.4版-&quot;<br/><br/>// 贪婪模式<br/>regexp.MustCompile(`^[0-9]+.*-`).FindString(s)<br/>// 输出: &quot;12.技术研发中心-数字人智能体V1.4版-&quot; （匹配到最后一个 -）<br/><br/>// 非贪婪模式<br/>regexp.MustCompile(`^[0-9]+.*?-`).FindString(s)<br/>// 输出: &quot;12.平台技术中心-&quot; （只匹配第一个 -）<br/>```<br/><br/>所以如果你只想去掉序号前的前缀 `1.平台技术中心-`，用非贪婪模式 `.*?` 就可以了。<br/><br/><br/>```<br/>问题：我是想产如果我有一堆：abcdefabchjkabclmnabc 上面有一堆abc，我想匹配abc到abc时，是匹配一遍就停下，它不贪婪的写法。<br/>```<br/>回复如下：<br/>明白了，你的需求是：在一个字符串中从第一个 `&quot;abc&quot;` 开始匹配到下一个 `&quot;abc&quot;`，**只匹配中间的内容一次，不贪婪地停在第一个符合条件的位置**。<br/><br/>在正则中，可以这样写：<br/><br/>```go<br/>package main<br/><br/>import (<br/>&nbsp;&nbsp;&quot;fmt&quot;<br/>&nbsp;&nbsp;&quot;regexp&quot;<br/>)<br/><br/>func main() {<br/>&nbsp;&nbsp;text := &quot;abcdefabchjkabclmnabc&quot;<br/><br/>&nbsp;&nbsp;// 非贪婪匹配：从第一个 abc 到下一个 abc<br/>&nbsp;&nbsp;re := regexp.MustCompile(`abc(.*?)abc`)<br/>&nbsp;&nbsp;matches := re.FindAllStringSubmatch(text, -1)<br/><br/>&nbsp;&nbsp;for i, m := range matches {<br/>&nbsp;&nbsp;&nbsp;&nbsp;fmt.Printf(&quot;匹配 %d: %s, 中间内容: %s&#92;n&quot;, i+1, m[0], m[1])<br/>&nbsp;&nbsp;}<br/>}<br/>```<br/><br/>### 解释：<br/><br/>1. `abc` → 匹配开头的 `&quot;abc&quot;`<br/>2. `(.*?)` → 非贪婪模式匹配任意字符（尽量少匹配）<br/>3. `abc` → 匹配结尾的 `&quot;abc&quot;`<br/><br/>### 输出：<br/><br/>```text<br/>匹配 1: abcdefabc, 中间内容: def<br/>匹配 2: abchjkabc, 中间内容: hjk<br/>匹配 3: abclmnabc, 中间内容: lmn<br/>```<br/><br/>✅ 注意关键点：<br/><br/>* `.*?` 就是非贪婪模式，匹配尽量少的字符。<br/>* 贪婪模式 `.*` 会把整个字符串从第一个 `&quot;abc&quot;` 吞到最后一个 `&quot;abc&quot;`，一次匹配结束，不会逐段匹配。<br/><br/><br/><br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [简单入门]什么是贪婪与非贪婪模式什么是贪婪与非贪婪模式，Go语言简单理解。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>