<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>《小议正则表达式效率：贪婪、非贪婪与回溯》的评论</title>
	<atom:link href="http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/</link>
	<description>技术这个东西如同一个圆 ,刚开始的时候我们就如同站在圆心,一旦投入学习下去 ,圆就慢慢变大 ,圆的边缘以外也就会越来越大,接触的多了 知道的多了, 就会发现自己真的很无知!</description>
	<lastBuildDate>Sun, 05 Feb 2012 11:13:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>作者：李惟</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3432</link>
		<dc:creator>李惟</dc:creator>
		<pubDate>Sun, 06 Feb 2011 18:19:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3432</guid>
		<description>还是正则回溯默认值的问题，麻烦帮忙看看，谢谢。

http://bbs.phpchina.com/thread-208687-1-1.html</description>
		<content:encoded><![CDATA[<p>还是正则回溯默认值的问题，麻烦帮忙看看，谢谢。</p>
<p><a href="http://bbs.phpchina.com/thread-208687-1-1.html" rel="nofollow">http://bbs.phpchina.com/thread-208687-1-1.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：正则表达式与数学（方程式、线性方程） &#124; CNXCT小组的博客</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3421</link>
		<dc:creator>正则表达式与数学（方程式、线性方程） &#124; CNXCT小组的博客</dc:creator>
		<pubDate>Sun, 09 Jan 2011 13:29:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3421</guid>
		<description>[...] 继续刚刚的正则，分为两个分支，其一为【^1?$】和【^(11+?)1+$】。其中【^】脱字符在正则语法中，除了在中括号【[]】中都是代表开头的意思，在中括号中的表示非。 第一个分支【^1?$】匹配的是“1”或者“”(空字符串)。 第二个分支【^(11+?)1+$】，先看下括号内的【(11+?)】匹配的是字符“1”后面接着【1+】就是1到无数个1。后面的【?】问号表示非贪婪，就是尽量少的匹配。 接着往后看【1+】中，【1】表示引用已匹配的第一个组的结果。也就是第一个【()】括号匹配的结果。同理【2】就是第二个括号捕获的结果。(小提示：上面提到的【(?:)写法就是不分配组，这样引用的话，就引用不到了】) 【+】就是1到无数个了。这个表达式我们可以这么看。【(11+?)】看成数学中的1+n，其中n为大于0的正整数。外面的【1+】也就是引用前面这个组的次数。理解成m倍，其中m为大于0的正整数。 那整个表达式就是(1+n)*m。因为n、m都大于0，那么1+n肯定大于1，最小为2，最大为无穷大；m最小为1，最大为无穷大。 那么，一个大于2的正整数的任何大于零的倍数永远都是合数，也就是非素数。 [...]</description>
		<content:encoded><![CDATA[<p>[...] 继续刚刚的正则，分为两个分支，其一为【^1?$】和【^(11+?)1+$】。其中【^】脱字符在正则语法中，除了在中括号【[]】中都是代表开头的意思，在中括号中的表示非。 第一个分支【^1?$】匹配的是“1”或者“”(空字符串)。 第二个分支【^(11+?)1+$】，先看下括号内的【(11+?)】匹配的是字符“1”后面接着【1+】就是1到无数个1。后面的【?】问号表示非贪婪，就是尽量少的匹配。 接着往后看【1+】中，【1】表示引用已匹配的第一个组的结果。也就是第一个【()】括号匹配的结果。同理【2】就是第二个括号捕获的结果。(小提示：上面提到的【(?:)写法就是不分配组，这样引用的话，就引用不到了】) 【+】就是1到无数个了。这个表达式我们可以这么看。【(11+?)】看成数学中的1+n，其中n为大于0的正整数。外面的【1+】也就是引用前面这个组的次数。理解成m倍，其中m为大于0的正整数。 那整个表达式就是(1+n)*m。因为n、m都大于0，那么1+n肯定大于1，最小为2，最大为无穷大；m最小为1，最大为无穷大。 那么，一个大于2的正整数的任何大于零的倍数永远都是合数，也就是非素数。 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：周末记事-还是我的老爷机 &#124; CNXCT小组的博客</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3358</link>
		<dc:creator>周末记事-还是我的老爷机 &#124; CNXCT小组的博客</dc:creator>
		<pubDate>Fri, 23 Jul 2010 10:31:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3358</guid>
		<description>[...] 先来解释一下U（大写字母U，非小写，小写的是uincode字符模式）是干吗的？ 是对“匹配优先量词（贪婪）”与“忽略优先量词（非贪婪）”的取反，也就是说，原来是【*】、【+】的，会按照【*?】、【+?】来执行，如果是【*?】、【+?】的，则按照【*】、【+】来执行，这个修饰符很怪，很乱，如果正则为【w+】,为了达到“非贪婪匹配”，使用了修饰符U。过几天，你修改了这个正则，修改为【w+s+?】,你的本意是在原来的基础上，加上非贪婪的空白字符的匹配，可是，后面的大写字母U修饰符也对你前面的非贪婪取反了，从而，导致匹配错误，所以，建议大家不要使用大写字母的U修饰符，直接在表达式里写好贪婪还是非贪婪。 [...]</description>
		<content:encoded><![CDATA[<p>[...] 先来解释一下U（大写字母U，非小写，小写的是uincode字符模式）是干吗的？ 是对“匹配优先量词（贪婪）”与“忽略优先量词（非贪婪）”的取反，也就是说，原来是【*】、【+】的，会按照【*?】、【+?】来执行，如果是【*?】、【+?】的，则按照【*】、【+】来执行，这个修饰符很怪，很乱，如果正则为【w+】,为了达到“非贪婪匹配”，使用了修饰符U。过几天，你修改了这个正则，修改为【w+s+?】,你的本意是在原来的基础上，加上非贪婪的空白字符的匹配，可是，后面的大写字母U修饰符也对你前面的非贪婪取反了，从而，导致匹配错误，所以，建议大家不要使用大写字母的U修饰符，直接在表达式里写好贪婪还是非贪婪。 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：CFC4N</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3352</link>
		<dc:creator>CFC4N</dc:creator>
		<pubDate>Tue, 06 Jul 2010 05:42:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3352</guid>
		<description>呵呵，互相学习。我觉得，想用好某个技术，必先知道其原理。知道其原理之后，优化，提高效率的问题，自然迎刃而解了。对于NFA引擎的正则的灵魂是回溯，而回溯恰恰又是造成浪费资源的一个罪魁祸首，在匹配长字符串的时候，如果能避免，或者减少回溯，可以提高很多效率。避免回溯的方法有固化分组，还有占有优先量词。呵呵，下次有时间，我再写篇占有有限量词的博文跟大家一起探讨一下。 :mrgreen:</description>
		<content:encoded><![CDATA[<p>呵呵，互相学习。我觉得，想用好某个技术，必先知道其原理。知道其原理之后，优化，提高效率的问题，自然迎刃而解了。对于NFA引擎的正则的灵魂是回溯，而回溯恰恰又是造成浪费资源的一个罪魁祸首，在匹配长字符串的时候，如果能避免，或者减少回溯，可以提高很多效率。避免回溯的方法有固化分组，还有占有优先量词。呵呵，下次有时间，我再写篇占有有限量词的博文跟大家一起探讨一下。 <img src='http://www.cnxct.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：ainiaa</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3350</link>
		<dc:creator>ainiaa</dc:creator>
		<pubDate>Tue, 06 Jul 2010 05:34:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3350</guid>
		<description>谢谢 lz的分享。 看lz的blog 受益匪浅。

同时想请教下， 正则应该怎么才能用好。我只有点基础。但是发现，想用好正则太难了。想系统的学习下。但是又不知道从何下手。望 不吝赐教</description>
		<content:encoded><![CDATA[<p>谢谢 lz的分享。 看lz的blog 受益匪浅。</p>
<p>同时想请教下， 正则应该怎么才能用好。我只有点基础。但是发现，想用好正则太难了。想系统的学习下。但是又不知道从何下手。望 不吝赐教</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：Loong05</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3345</link>
		<dc:creator>Loong05</dc:creator>
		<pubDate>Sat, 26 Jun 2010 09:15:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3345</guid>
		<description>看不懂 :mrgreen:</description>
		<content:encoded><![CDATA[<p>看不懂 <img src='http://www.cnxct.com/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：PHP正则表达式的效率：回溯与固化分组 &#124; CNXCT小组的博客</title>
		<link>http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/comment-page-1/#comment-3321</link>
		<dc:creator>PHP正则表达式的效率：回溯与固化分组 &#124; CNXCT小组的博客</dc:creator>
		<pubDate>Mon, 21 Jun 2010 07:39:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.cnxct.com/%e5%b0%8f%e8%ae%ae%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%95%88%e7%8e%87%ef%bc%9a%e8%b4%aa%e5%a9%aa%e3%80%81%e9%9d%9e%e8%b4%aa%e5%a9%aa%e4%b8%8e%e5%9b%9e%e6%ba%af/#comment-3321</guid>
		<description>[...] 对于上篇BLOG上提到的鸟哥谈到一个非贪婪引起的大量回溯问题，大家可以知道，回溯，确实是浪费资源的罪魁祸首，那么，我们能否不让其回溯呢？ 答案是肯定的，NFA引擎中，有个概念，叫固化分组。引用一下书上的概念  具体来说，使用「(?&gt;…)」的匹配与正常的匹配并无差别，但是如果匹配进行到此结构之后（也就是，进行到闭括号之后），那么此结构体中的所有备用状态都会被放弃。也就是说，在固化分组匹配结束时，它已经匹配的文本已经固化为一个单元，只能作为整体而保留或放弃。括号内的子表达式中未尝试过的备用状态都不复存在了，所以回溯永远也不能选择其中的状态（至少是，当此结构匹配完成时，“锁定（locked in）”在其中的状态）。 [...]</description>
		<content:encoded><![CDATA[<p>[...] 对于上篇BLOG上提到的鸟哥谈到一个非贪婪引起的大量回溯问题，大家可以知道，回溯，确实是浪费资源的罪魁祸首，那么，我们能否不让其回溯呢？ 答案是肯定的，NFA引擎中，有个概念，叫固化分组。引用一下书上的概念  具体来说，使用「(?&gt;…)」的匹配与正常的匹配并无差别，但是如果匹配进行到此结构之后（也就是，进行到闭括号之后），那么此结构体中的所有备用状态都会被放弃。也就是说，在固化分组匹配结束时，它已经匹配的文本已经固化为一个单元，只能作为整体而保留或放弃。括号内的子表达式中未尝试过的备用状态都不复存在了，所以回溯永远也不能选择其中的状态（至少是，当此结构匹配完成时，“锁定（locked in）”在其中的状态）。 [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

