<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>『 神仙居 』 &#187; 正则表达式</title>
	<atom:link href="http://www.azurey.com/blog/category/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.azurey.com/blog</link>
	<description>better late than never</description>
	<lastBuildDate>Sat, 11 Feb 2012 12:07:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>正则表达式U修正符。</title>
		<link>http://www.azurey.com/blog/2009/06/u-modifier-regular-expression.html</link>
		<comments>http://www.azurey.com/blog/2009/06/u-modifier-regular-expression.html#comments</comments>
		<pubDate>Sat, 06 Jun 2009 05:11:00 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[正则表达式]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[修正符]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/06/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8fu%e4%bf%ae%e6%ad%a3%e7%ac%a6%e3%80%82/</guid>
		<description><![CDATA[代码贴了居然引起样式问题，还能再2一点么。]]></description>
			<content:encoded><![CDATA[<pre class="brush:php">echo '&lt;pre&gt;';  

 $str = '&lt;ul&gt;hello world&lt;li&gt;hi&lt;/li&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ul&gt;';  

 $pattern = '~&lt;li&gt;.*&lt;/li&gt;~';  

 preg_match($pattern,$str,$matches);  

 var_dump($matches);  

 /*  

 array(1) {  

  [0]=&gt;  

  string(25) "&lt;li&gt;hi&lt;/li&gt;&lt;li&gt;hello&lt;/li&gt;"  

}  

*/ 

$pattern1 = '~&lt;li&gt;.*?&lt;/li&gt;~';  

preg_match($pattern1,$str,$matches1);  

var_dump($matches1);  

/*  

array(1) {  

  [0]=&gt;  

  string(11) "&lt;li&gt;hi&lt;/li&gt;"  

}  

*/ 

$pattern2 = '~&lt;li&gt;.*&lt;/li&gt;~U';  

preg_match($pattern2,$str,$matches2);  

var_dump($matches2);  

/*  

array(1) {  

  [0]=&gt;  

  string(11) "&lt;li&gt;hi&lt;/li&gt;"  

}  

*/ 

$pattern3 = '~&lt;li&gt;.*?&lt;/li&gt;~U';  

preg_match($pattern3,$str,$matches3);  

var_dump($matches3);  

/*  

array(1) {  

  [0]=&gt;  

  string(25) "&lt;li&gt;hi&lt;/li&gt;&lt;li&gt;hello&lt;/li&gt;"  

}  

*/</pre>
<p>事实证明，加了U，原来是贪婪匹配的变成非贪婪匹配，非贪婪匹配的却变成了贪婪匹配。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/06/u-modifier-regular-expression.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>零宽断言 环视结构</title>
		<link>http://www.azurey.com/blog/2009/05/regular-expression-lookaround.html</link>
		<comments>http://www.azurey.com/blog/2009/05/regular-expression-lookaround.html#comments</comments>
		<pubDate>Mon, 04 May 2009 12:43:31 +0000</pubDate>
		<dc:creator>南晓晓</dc:creator>
				<category><![CDATA[正则表达式]]></category>
		<category><![CDATA[正则]]></category>
		<category><![CDATA[环视结构]]></category>
		<category><![CDATA[零宽断言]]></category>

		<guid isPermaLink="false">http://www.azurey.com/blog/2009/05/%e9%9b%b6%e5%ae%bd%e6%96%ad%e8%a8%80-%e7%8e%af%e8%a7%86%e7%bb%93%e6%9e%84/</guid>
		<description><![CDATA[嘎嘎，其实俺对零宽断言一直似懂非懂，趁这机会赶紧研究一番。一直知道这个匹配的是个位置，但是前后顺序并不太清楚，所以这两句俺也不知道有嘛区别。

研究了一番后，俺再来看这个例子就明白多了。

第一个，俺再看时，被雷了一下。难道这不是个错误的正则咩，冏，但是PHP是不会报错滴，只是输出鸟一个0。]]></description>
			<content:encoded><![CDATA[<p>嘎嘎，其实俺对零宽断言一直似懂非懂，趁这机会赶紧研究一番。一直知道这个匹配的是个位置，但是前后顺序并不太清楚，所以这两句俺也不知道有嘛区别。</p>
<p>研究了一番后，俺再来看这个例子就明白多了。</p>
<p>第一个，俺再看时，被雷了一下。难道这不是个错误的正则咩，冏，但是PHP是不会报错滴，只是输出鸟一个0。</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="vars">$str</span><span> = </span><span class="string">'m123'</span><span>;  </span></span></li>
<li><span class="func">echo</span><span> preg_match(</span><span class="string">'/^(?=\d)m$/'</span><span>,</span><span class="vars">$str</span><span>); </span></li>
</ol>
</pre>
<p>在群里跟shanji，小鱼儿讨论之后，都认同了，这个正则是木法匹配滴。</p>
<p>因为(?=\d)匹配的是后面是数字的这样一个位置，但是偏偏它的后面是个m，所以此句匹配不能。</p>
<p>再来看第二个，这句的错误就在于(?=\d)后面的那个$，它的后面要的是数字，而不是结束符。</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="vars">$str</span><span> = </span><span class="string">'m123'</span><span>;  </span></span></li>
<li><span class="func">echo</span><span> preg_match(</span><span class="string">'/^m(?=\d)$/'</span><span>,</span><span class="vars">$str</span><span>); </span><span class="comment">//如果是/^m(?=\d)/,那么就能匹配m123中滴m鸟</span><span> </span></li>
</ol>
</pre>
<p>上面的是零宽先行断言（肯定顺序环视），再说个零宽后行断言（肯定逆序环视）的例子</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="vars">$str</span><span> = </span><span class="string">'123m'</span><span>;   </span></span></li>
<li><span class="func">echo</span><span> preg_match(</span><span class="string">'/(?&lt;=\d)m$/'</span><span>,</span><span class="vars">$str</span><span>); </span></li>
<li><span class="comment">//匹配123m中的m,前面不能有^,是木有/^(?&lt;=\d)/这样一个位置的</span></li>
</ol>
</pre>
<p>举个实际应用零宽断言的例子吧。。</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="vars">$pop</span><span> = </span><span class="string">'The US population is 3298444215'</span><span>;  </span></span></li>
<li><span class="func">echo</span><span> </span><span class="vars">$pop</span><span>; </span></li>
</ol>
</pre>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="vars">$pop</span><span> = </span><span class="string">'The US population is 3298444215'</span><span>;  </span></span></li>
<li><span class="vars">$pop</span><span> = preg_replace(</span><span class="string">'/(?&lt;=\d)(?=(<a>\d\d\d)+(?!\d))/'</a></span><span>,</span><span class="string">','</span><span>,</span><span class="vars">$pop</span><span>);  </span></li>
<li class="alt"><span class="func">echo</span><span> </span><span class="vars">$pop</span><span>;  </span></li>
<li><span class="comment">//The US population is 3,298,444,215</span><span> </span></li>
</ol>
</pre>
<p>其中的正则匹配的是左边有1个数字，右边为3的倍数个数字且后面不为数字的位置，最后用&#8221;,&#8221;替换。</p>
<p>嘎嘎，其实开始木明白，感觉shanji童鞋的帮助。</p>
<p>俺的第一篇原创技术文章，就此诞生，在此俺感谢CCAV，感谢PPC，感谢yes，感谢yes的水友们。。。还有《精通正则表达式》</p>
]]></content:encoded>
			<wfw:commentRss>http://www.azurey.com/blog/2009/05/regular-expression-lookaround.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

