<?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>tommy &#187; regex</title>
	<atom:link href="http://www.tomlog.com/tag/regex/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tomlog.com</link>
	<description>everyday is a new life!</description>
	<lastBuildDate>Sat, 19 Feb 2011 12:00:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>低调推出goo.gl短网址服务</title>
		<link>http://www.tomlog.com/2010/04/googl/</link>
		<comments>http://www.tomlog.com/2010/04/googl/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 03:51:44 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.tomlog.com/?p=764</guid>
		<description><![CDATA[Address:]]></description>
			<content:encoded><![CDATA[<table cellspacing="5">
<tr>
<td>Address: </td>
<td width="236">
<input type="text" id="address" name="address" size="35"/></td>
<td>
<input type="button" id="submit" name="submit" value="Submit" /></td>
</tr>
<tr id="result">
</tr>
</table>
<p><script type="text/javascript" src="/wp-content/uploads/jquery.js"></script><br />
<script type="text/javascript" src="/wp-content/uploads/googl.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomlog.com/2010/04/googl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>正则啊正则</title>
		<link>http://www.tomlog.com/2009/12/confusing-regex/</link>
		<comments>http://www.tomlog.com/2009/12/confusing-regex/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 03:06:56 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.tomlog.com/?p=722</guid>
		<description><![CDATA[快被这几个正则给搞死了! 是用来匹配C语言中的/*&#8230;*/这样的注释，为了便于表示，将*替换为x,有以下三种方法： /x([^x]&#124;x+[^/])*x/ /x([^x]&#124;x+[^/x])*x+/ /x[^x]*x+([^/x][^x]*x+)*/ 第一个肯定是不对的，能够匹配过多的内容，比如 /xx A xx/ foo() /xx B xx/ .原因是，如果遇到&#8230;x/&#8230;, /迫使[^/]匹配了x,而下一轮迭代中的[^x]则正好可以匹配/,从而导致越过边界。 所以上边第二个正则中，使用[^/x]来迫使x+返还/前的所有x,这样可以达到匹配/x&#8230;x/的要求。 最后一个正则使用opening normal * (special normal *)* closing的形式，这样具有更高的匹配效率，首先匹配非x字符，然后是x,之后判断x之后是否为/,如果是，则结束匹配，否则进入下一轮special normal* 的循环。直到找到x后的/结束，完成匹配。 其实在第三个正则表达式中，最迷惑我的是special部分为什么用[^/x]而不是[^/],后来想了好久，发现[^/]和[^/x]的区别只发生在正则无法匹配字符串时，如果无法匹配，必然会迫使normal部分，即[^x]*x+,返还x,而返还的x正好可以被spcial部分的[^/]匹配，从而在无法匹配时造成无休止的循环。 使用[^/x]则避免了这个问题，可以立即报告匹配结束。 在实际应用中，需将x替换为*,以第三个为例，最终的正则表达式应该是 /\*[^*]*\*+(?:[^/*][^*]*\*+)*\*/ 需要说明的是，如果你的正则引擎支持忽略优先量词，这样写是很傻逼的，直接用 /\*.*?\*/ 就搞定了。]]></description>
			<content:encoded><![CDATA[<p>快被这几个正则给搞死了! 是用来匹配C语言中的/*&#8230;*/这样的注释，为了便于表示，将*替换为x,有以下三种方法：</p>
<blockquote><p>/x([^x]|x+[^/])*x/</p></blockquote>
<blockquote><p>/x([^x]|x+[^/x])*x+/</p></blockquote>
<blockquote><p>/x[^x]*x+([^/x][^x]*x+)*/</p></blockquote>
<p>第一个肯定是不对的，能够匹配过多的内容，比如 /xx A xx/ foo() /xx B xx/ .原因是，如果遇到&#8230;x/&#8230;, /迫使[^/]匹配了x,而下一轮迭代中的[^x]则正好可以匹配/,从而导致越过边界。 所以上边第二个正则中，使用[^/x]来迫使x+返还/前的所有x,这样可以达到匹配/x&#8230;x/的要求。</p>
<p>最后一个正则使用opening normal * (special normal *)* closing的形式，这样具有更高的匹配效率，首先匹配非x字符，然后是x,之后判断x之后是否为/,如果是，则结束匹配，否则进入下一轮special normal* 的循环。直到找到x后的/结束，完成匹配。</p>
<p>其实在第三个正则表达式中，最迷惑我的是special部分为什么用[^/x]而不是[^/],后来想了好久，发现[^/]和[^/x]的区别只发生在正则无法匹配字符串时，如果无法匹配，必然会迫使normal部分，即[^x]*x+,返还x,而返还的x正好可以被spcial部分的[^/]匹配，从而在无法匹配时造成无休止的循环。 使用[^/x]则避免了这个问题，可以立即报告匹配结束。</p>
<p>在实际应用中，需将x替换为*,以第三个为例，最终的正则表达式应该是</p>
<blockquote><p>/\*[^*]*\*+(?:[^/*][^*]*\*+)*\*/</p></blockquote>
<p>需要说明的是，如果你的正则引擎支持忽略优先量词，这样写是很傻逼的，直接用</p>
<blockquote><p>/\*.*?\*/</p></blockquote>
<p>就搞定了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomlog.com/2009/12/confusing-regex/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>正则表达式实现视频解析</title>
		<link>http://www.tomlog.com/2009/11/parse-video-using-regex/</link>
		<comments>http://www.tomlog.com/2009/11/parse-video-using-regex/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 03:59:57 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.tomlog.com/?p=692</guid>
		<description><![CDATA[前天帮同学下载一部电视剧，但找到的bt种子速度太慢，只好放弃，于是决定下载56网的视频，只所以选择56网，是因为它的视频没有被分割，而且我可以牛刀小试一下正则表达式，利用它来批量解析下载地址。之后使用迅雷下载，甚爽。 下面这个是使用perl写的（文件名parse），适用于批量解析。可将所有需要下载视频的flash地址（例：http://www.56.com/n_v48_/c23_/8_/19_/hellowjjb_/zhajm_120817547185x_/2725000_/0_/32802621.swf）写入一个文件(1.txt)，然后运行perl -w parse 1.txt > 2.txt 即可瞬间得到下载地址。 while ($line=&#60;&#62;) { if($line=~m/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/) { print &#8220;http://c$1.56.com/flvdownload/$2/$3/$4\@56.com_56flv_$5.flv\n&#8221;; } } 这个是php版的代码： &#60;html&#62; &#60;head&#62; &#60;title&#62;56网视频解析&#60;/title&#62; &#60;/head&#62; &#60;body&#62; &#60;h3 style=&#8221;text-align:center&#8221;&#62;视频解析&#60;/h3&#62; &#60;br /&#62; &#60;form method=&#8221;post&#8221; action=&#8221;#&#8221;&#62; &#60;center&#62;&#60;input type=&#8221;text&#8221; size=&#8221;60&#8243; name=&#8221;url&#8221; /&#62; &#60;input type=&#8221;submit&#8221; name=&#8221;submit&#8221; value=&#8221;Submit&#8221; /&#62;&#60;/center&#62;&#60;br /&#62; &#60;/form&#62; &#60;?php if(isset($_POST['url'])&#038;&#038;isset($_POST['submit'])) { $url=$_POST['url']; $pattern=&#8217;/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/&#8217;; if(preg_match($pattern,$url,$matches)) { $download=&#8221;http://c$matches[1].56.com/flvdownload/$matches[2]/$matches[3]/$matches[4]@56.com_56flv_$matches[5].flv&#8221;; } else { $download=&#8221;sorry,can not [...]]]></description>
			<content:encoded><![CDATA[<p>前天帮同学下载一部电视剧，但找到的bt种子速度太慢，只好放弃，于是决定下载56网的视频，只所以选择56网，是因为它的视频没有被分割，而且我可以牛刀小试一下正则表达式，利用它来批量解析下载地址。之后使用迅雷下载，甚爽。</p>
<p>下面这个是使用perl写的（文件名parse），适用于批量解析。可将所有需要下载视频的flash地址（例：http://www.56.com/n_v48_/c23_/8_/19_/hellowjjb_/<br />zhajm_120817547185x_/2725000_/0_/32802621.swf）写入一个文件(1.txt)，然后运行perl -w parse 1.txt > 2.txt 即可瞬间得到下载地址。</p>
<blockquote><p>while ($line=&lt;&gt;)<br />
{<br />
	if($line=~m/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/)<br />
		{<br />
  			print &#8220;http://c$1.56.com/flvdownload/$2/$3/$4\@56.com_56flv_$5.flv\n&#8221;;<br />
  		}<br />
}</p></blockquote>
<p>这个是php版的代码：</p>
<blockquote><p>
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;56网视频解析&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h3 style=&#8221;text-align:center&#8221;&gt;视频解析&lt;/h3&gt;<br />
&lt;br /&gt;<br />
&lt;form method=&#8221;post&#8221; action=&#8221;#&#8221;&gt;<br />
	&lt;center&gt;&lt;input type=&#8221;text&#8221; size=&#8221;60&#8243; name=&#8221;url&#8221; /&gt;<br />
	&lt;input type=&#8221;submit&#8221; name=&#8221;submit&#8221; value=&#8221;Submit&#8221; /&gt;&lt;/center&gt;&lt;br /&gt;<br />
&lt;/form&gt;</p>
<p>&lt;?php<br />
if(isset($_POST['url'])&#038;&#038;isset($_POST['submit']))<br />
{<br />
	$url=$_POST['url'];<br />
	$pattern=&#8217;/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/&#8217;;<br />
	if(preg_match($pattern,$url,$matches))<br />
		{<br />
			$download=&#8221;http://c$matches[1].56.com/flvdownload/$matches[2]/$matches[3]/$matches[4]@56.com_56flv_$matches[5].flv&#8221;;<br />
		}<br />
	else<br />
		{<br />
			$download=&#8221;sorry,can not parse download address!&#8221;;<br />
		}<br />
	echo &#8220;下载地址是：&lt;br /&gt;$download&#8221;;<br />
}<br />
?&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
</p></blockquote>
<p>效果请看 <a href="http://www.tomlog.com/parse.php" target="_blanck">这里</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomlog.com/2009/11/parse-video-using-regex/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>正则表达式学习</title>
		<link>http://www.tomlog.com/2009/10/study-regular-expression/</link>
		<comments>http://www.tomlog.com/2009/10/study-regular-expression/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 10:20:33 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.tomlog.com/?p=585</guid>
		<description><![CDATA[for /r %i in (*.*) do @perl -pi.bak -e "s/^.*$/hello, world!/g" "%i" (注：如果你不明白以上命令，请不要尝试运行。)]]></description>
			<content:encoded><![CDATA[<pre>for /r %i in (*.*) do @perl -pi.bak -e "s/^.*$/hello, world!/g" "%i"</pre>
<p>(注：如果你不明白以上命令，请不要尝试运行。)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomlog.com/2009/10/study-regular-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

