﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-从制造到创造-随笔分类-JavaScript</title><link>http://www.blogjava.net/coderdream/category/15268.html</link><description>软件工程师成长之路</description><language>zh-cn</language><lastBuildDate>Thu, 11 Oct 2007 19:14:43 GMT</lastBuildDate><pubDate>Thu, 11 Oct 2007 19:14:43 GMT</pubDate><ttl>60</ttl><item><title>如何正确利用超链接调用JavaScript函数</title><link>http://www.blogjava.net/coderdream/archive/2007/10/11/151958.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 11 Oct 2007 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2007/10/11/151958.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/151958.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2007/10/11/151958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/151958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/151958.html</trackback:ping><description><![CDATA[点击超链接调用JavaScript函数，一般人都用&lt;a href="javascript:function();"&gt;<br />
<strong>但这有个缺点，就是点击链接后，页面上的GIF动画将静止。</strong> <br />
<strong></strong><br />
试看如下代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: Verdana; background-color: #eeeeee"><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;!--</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Foo()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">do&nbsp;something</span><span style="color: #008000"><br />
</span><span style="color: #000000">}<br />
</span><span style="color: #008000">//</span><span style="color: #008000">--&gt;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">img&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">http://****/logo.gif</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:Foo();</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">使GIF动画静止的链接</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;</span></div>
<br />
<strong>解决方法探讨：</strong><br />
&lt;a <strong>onclick</strong>="javascript:Foo();"&gt;链接&lt;/a&gt;<br />
此时不影响动画显示，但鼠标移上去后，鼠标及超链接样式不发生变化，虽然可以利用样式表来改变鼠标及超链接样式，但毕竟有些繁琐，况且这种思路也不好。<br />
再考查如下代码：<br />
&lt;a onclick="javascript:Foo();" href="#"&gt;链接&lt;/a&gt;<br />
我们可以发现，虽然点击链接后不影响动画显示，但页面总是滚到最上面，这种效果也不是我们想要的。<br />
<br />
<strong>最终解决方法：<br />
</strong>&lt;a onclick="javascript:Foo(); return false;" href="#"&gt;不影响GIF的链接&lt;/a&gt;<br />
由于点接链接后，先触发onclick，再执行href属性对应的值，在onclick中加上return false;中断了执行，所以页面就不会跳到最上部了。 
<img src ="http://www.blogjava.net/coderdream/aggbug/151958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2007-10-11 10:11 <a href="http://www.blogjava.net/coderdream/archive/2007/10/11/151958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]通过按钮添加行</title><link>http://www.blogjava.net/coderdream/archive/2007/10/09/151275.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Tue, 09 Oct 2007 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2007/10/09/151275.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/151275.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2007/10/09/151275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/151275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/151275.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: Verdana; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">language</span><span style="color: #0000ff">="javascript"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;rowIndex&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;addOneLineOnClick()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;row&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;tb.insertRow(tb.rows.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;row.insertCell(</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col.innerHTML&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&lt;tr&gt;&lt;input&nbsp;size='90'&nbsp;&nbsp;name=btn&nbsp;index=\</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">+&nbsp;rowIndex&nbsp;+</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">\</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&gt;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;row.insertCell(</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col.innerHTML&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&lt;input&nbsp;type='button'&nbsp;value='Del'&nbsp;&nbsp;onclick=\</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #0000ff; background-color: #f5f5f5">return</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DeleteRow('row</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;+&nbsp;rowIndex&nbsp;+</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">')\</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&gt;&lt;/tr&gt;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.setAttribute(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">id</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">row</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;rowIndex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.setAttribute(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">name</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">row</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;rowIndex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowIndex</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DeleteRow(rowTag){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;tb.rows(rowTag).rowIndex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">(j</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">i;j</span><span style="color: #000000; background-color: #f5f5f5">&lt;=</span><span style="color: #000000; background-color: #f5f5f5">rowIndex;j</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb.rows(j).cells(</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">).all(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">btn</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">).index</span><span style="color: #000000; background-color: #f5f5f5">--</span><span style="color: #000000; background-color: #f5f5f5">;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb.deleteRow(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowIndex</span><span style="color: #000000; background-color: #f5f5f5">--</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">align</span><span style="color: #0000ff">="center"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">="95%"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="tb"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="tb"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="btnAddLine"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="btnAddLine"</span><span style="color: #ff0000">&nbsp;onClick</span><span style="color: #0000ff">="return&nbsp;addOneLineOnClick()"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="Add"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<img src ="http://www.blogjava.net/coderdream/aggbug/151275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2007-10-09 10:14 <a href="http://www.blogjava.net/coderdream/archive/2007/10/09/151275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式之网摘</title><link>http://www.blogjava.net/coderdream/archive/2006/10/14/75082.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 16:31:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/14/75082.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75082.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/14/75082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75082.html</trackback:ping><description><![CDATA[1、<a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/dragon/archive/2006/05/08/394078.html">深入浅出之正则表达式（一）</a><br />2、<a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/dragon/archive/2006/05/09/394923.html"><font color="#000080">深入浅出之正则表达式（二）</font></a><br />3、<font color="#0f3ccd"><a href="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp">Java正则表达式详解</a></font><br />4、<strong><a href="http://www.programfan.com/article/showarticle.asp?id=2476">PHP和正则表达式</a></strong><br /><br /><img src ="http://www.blogjava.net/coderdream/aggbug/75082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-14 00:31 <a href="http://www.blogjava.net/coderdream/archive/2006/10/14/75082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式(regular expression)</title><link>http://www.blogjava.net/coderdream/archive/2006/10/14/75081.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 16:25:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/14/75081.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75081.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/14/75081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75081.html</trackback:ping><description><![CDATA[
		<h1>
				<font size="2">关键字： 正则表达式，Regular Expression</font>
		</h1>
		<p>
				<font size="2">作者：笑容</font>
		</p>
		<p>
				<font size="2">发表于：2004年05月03日<br />最后更新：<!--webbot bot="Timestamp" S-Type="REGENERATED" S-Format="%Y年%m月%d日 %H:%M" startspan -->2005年01月17日 19:54<!--webbot bot="Timestamp" endspan i-checksum="8120" --><br />版权声明：使用</font>
				<font size="2">
						<a href="http://www.creativecommons.cn/licenses/by-nc/1.0/">创作公用版权协议</a>
				</font>
		</p>
		<p>
		</p>
		<p>
				<a href="http://oo8h.51.net/docs/redhat_enterprise_linux.htm">
				</a>
		</p>
		<hr />
		<p>
				<b>前言</b>
		</p>
		<p>正则表达式是烦琐的，但是强大的，学会之后的应用会让你除了提高效率外，会给你带来绝对的成就感。只要认真去阅读这些资料，加上应用的时候进行一定的参考，掌握正则表达式不是问题。</p>
		<p>
				<b>索引</b>
		</p>
		<p>
				<a href="#1._引子">
						<font size="2">1._引子</font>
				</a>
				<font size="2">
						<br />
						<a href="#2._正则表达式的历史">2._正则表达式的历史</a>
						<br />
				</font>
				<a href="#3._正则表达式定义">
						<font size="2">3._正则表达式定义</font>
				</a>
		</p>
		<blockquote>
				<p>
						<a href="#3.1_普通字符">
								<font size="2">3.1_普通字符</font>
						</a>
						<font size="2">
								<br />
								<a href="#3.2_非打印字符">3.2_非打印字符</a>
								<br />
								<a href="#3.3_特殊字符">3.3_特殊字符</a>
								<br />
								<a href="#3.4_限定符">3.4_限定符</a>
								<br />
								<a href="#3.5_定位符">3.5_定位符</a>
								<br />
								<a href="#3.6_选择">3.6_选择</a>
								<br />
						</font>
						<a href="#3.7_后向引用">
								<font size="2">3.7_后向引用</font>
						</a>
				</p>
		</blockquote>
		<p>
				<a href="#4._各种操作符的运算优先级">
						<font size="2">4._各种操作符的运算优先级</font>
				</a>
				<font size="2">
						<br />
						<a href="#5._全部符号解释">5._全部符号解释</a>
						<br />
						<a href="#6._部分例子">6._部分例子</a>
						<br />
				</font>
				<a href="#7._正则表达式匹配规则">
						<font size="2">7._正则表达式匹配规则</font>
				</a>
		</p>
		<blockquote>
				<p>
						<a href="#7.1_基本模式匹配">
								<font size="2">7.1_基本模式匹配</font>
						</a>
						<font size="2">
								<br />
								<a href="#7.2_字符簇">7.2_字符簇</a>
								<br />
						</font>
						<a href="#7.3_确定重复出现">
								<font size="2">7.3_确定重复出现</font>
						</a>
				</p>
		</blockquote>
		<hr />
		<h2>
				<a name="1._引子">1. 引子</a>
		</h2>
		<p>　　目前，正则表达式已经在很多软件中得到广泛的应用，包括*nix（Linux, Unix等），HP等操作系统，PHP，C#，Java等开发环境，以及很多的应用软件中，都可以看到正则表达式的影子。</p>
		<p>　　正则表达式的使用，可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大，造成了正则表达式代码的难度较大，学习起来也不是很容易，所以需要付出一些努力才行，入门之后参照一定的参考，使用起来还是比较简单有效的。</p>
		<blockquote>
				<p>例子：<span style="BACKGROUND-COLOR: #00ffff"> ^.+@.+\\..+$ </span></p>
		</blockquote>
		<p>　　这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。</p>
		<p>　　注意：这里的第7部分跟前面的内容看起来似乎有些重复，目的是把前面表格里的部分重新描述了一次，目的是让这些内容更容易理解。</p>
		<h2>
				<b>
						<a name="2._正则表达式的历史">2. 正则表达式的历史</a>
				</b>
		</h2>
		<div id="nstext" valign="bottom">　　正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
<p>　　1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上，发表了一篇标题为“神经网事件的表示法”的论文，引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式，因此采用“正则表达式”这个术语。</p><p>　　随后，发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究，Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 <i>qed </i>编辑器。</p><p>　　如他们所说，剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。</p></div>
		<p>　</p>
		<h2>
				<b>
						<a name="3._正则表达式定义">3. 正则表达式定义</a>
				</b>
		</h2>
		<p>　　正则表达式(regular expression)描述了一种字符串匹配的模式，可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。</p>
		<blockquote>
				<ul>
						<li>
								<span style="BACKGROUND-COLOR: #ffff00">列目录时，　dir *.txt或ls *.txt中的*.txt就</span>
								<font color="#ff0000">
										<span style="BACKGROUND-COLOR: #ffff00">不</span>
								</font>
								<span style="BACKGROUND-COLOR: #ffff00">是一个正则表达式,因为这里*与正则式的*的含义是不同的。</span>
						</li>
				</ul>
		</blockquote>
		<p>　　正则表达式是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
		<h3>
				<b>
						<a name="3.1_普通字符">3.1 普通字符</a>
				</b>
		</h3>
		<p>　　由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。 </p>
		<h3>
				<a name="3.2_非打印字符">3.2 非打印字符</a>
		</h3>
		<table cellspacing="1" cellpadding="3" border="0">
				<tbody>
						<tr>
								<th style="FONT-SIZE: 12px" align="left">字符 </th>
								<th style="FONT-SIZE: 12px" align="left">含义</th>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\cx </td>
								<td style="FONT-SIZE: 12px">匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\f </td>
								<td style="FONT-SIZE: 12px">匹配一个换页符。等价于 \x0c 和 \cL。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\n </td>
								<td style="FONT-SIZE: 12px">匹配一个换行符。等价于 \x0a 和 \cJ。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\r </td>
								<td style="FONT-SIZE: 12px">匹配一个回车符。等价于 \x0d 和 \cM。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\s </td>
								<td style="FONT-SIZE: 12px">匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\S </td>
								<td style="FONT-SIZE: 12px">匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\t </td>
								<td style="FONT-SIZE: 12px">匹配一个制表符。等价于 \x09 和 \cI。</td>
						</tr>
						<tr>
								<td style="FONT-SIZE: 12px">\v </td>
								<td style="FONT-SIZE: 12px">匹配一个垂直制表符。等价于 \x0b 和 \cK。</td>
						</tr>
				</tbody>
		</table>
		<br />　
<h3><a name="3.3_特殊字符">3.3 特殊字符</a></h3>　　所谓特殊字符，就是一些有特殊含义的字符，如上面说的"*.txt"中的*，简单的说就是表示任何字符串的意思。如果要查找文件名中有＊的文件，则需要对＊进行转义，即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。
<p>　</p><table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th style="FONT-SIZE: 12px" align="left">特别字符</th><th style="FONT-SIZE: 12px" align="left">说明</th></tr><tr><td style="FONT-SIZE: 12px">$</td><td style="FONT-SIZE: 12px">匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。</td></tr><tr><td style="FONT-SIZE: 12px">( )</td><td style="FONT-SIZE: 12px">标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用 \( 和 \)。</td></tr><tr><td style="FONT-SIZE: 12px">*</td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。</td></tr><tr><td style="FONT-SIZE: 12px">+</td><td style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。</td></tr><tr><td style="FONT-SIZE: 12px">.</td><td style="FONT-SIZE: 12px">匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。</td></tr><tr><td style="FONT-SIZE: 12px">[ </td><td style="FONT-SIZE: 12px">标记一个中括号表达式的开始。要匹配 [，请使用 \[。</td></tr><tr><td style="FONT-SIZE: 12px">?</td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? 字符，请使用 \?。</td></tr><tr><td style="FONT-SIZE: 12px">\</td><td style="FONT-SIZE: 12px">将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\"，而 '\(' 则匹配 "("。</td></tr><tr><td style="FONT-SIZE: 12px">^</td><td style="FONT-SIZE: 12px">匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。</td></tr><tr><td style="FONT-SIZE: 12px">{</td><td style="FONT-SIZE: 12px">标记限定符表达式的开始。要匹配 {，请使用 \{。</td></tr><tr><td style="FONT-SIZE: 12px">|</td><td style="FONT-SIZE: 12px">指明两项之间的一个选择。要匹配 |，请使用 \|。</td></tr></tbody></table><blockquote><ul><li><strong style="FONT-WEIGHT: 400; BACKGROUND-COLOR: #ffff00">　　构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。</strong></li></ul></blockquote><p>　</p><h3><a name="3.4_限定符">3.4 限定符</a></h3>　　限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。<br />*、+和?限定符都是贪婪的，因为它们会尽可能多的匹配文字，只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。<br />　　正则表达式的限定符有：<br />　
<table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th style="FONT-SIZE: 12px" align="left">字符 </th><th style="FONT-SIZE: 12px" align="left">描述</th></tr><tr><td style="FONT-SIZE: 12px">* </td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。</td></tr><tr><td style="FONT-SIZE: 12px">+ </td><td style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。</td></tr><tr><td style="FONT-SIZE: 12px">? </td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。</td></tr><tr><td style="FONT-SIZE: 12px">{n} </td><td style="FONT-SIZE: 12px">n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</td></tr><tr><td style="FONT-SIZE: 12px">{n,} </td><td style="FONT-SIZE: 12px">n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。</td></tr><tr><td style="FONT-SIZE: 12px">{n,m} </td><td style="FONT-SIZE: 12px">m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</td></tr></tbody></table><h3><a name="3.5_定位符">3.5 定位符</a></h3>　　用来描述字符串或单词的边界，^和$分别指字符串的开始与结束，\b描述单词的前或后边界，\B表示非单词边界。<font color="#ff0000">不能对定位符使用限定符。</font><h3><a name="3.6_选择">3.6 选择</a></h3>　　用圆括号将所有选择项括起来，相邻的选择项之间用|分隔。但用圆括号会有一个副作用，是相关的匹配会被缓存，此时可用?:放在第一个选项前来消除这种副作用。<br />　　其中?:是非捕获元之一，还有两个非捕获元是?=和?!，这两个还有更多的含义，前者为正向预查，在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串，后者为负向预查，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。 
<h3><a name="3.7_后向引用">3.7 后向引用</a></h3>　　对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中，所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始，连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问，其中 n 为一个标识特定缓冲区的一位或两位十进制数。<br />　　可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对相关匹配的保存。 
<h2><a name="4._各种操作符的运算优先级">4. 各种操作符的运算优先级</a></h2>　　相同优先级的从左到右进行运算，不同优先级的运算先高后低。各种操作符的优先级从高到低如下：<br />　
<table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th style="FONT-SIZE: 12px" align="left">操作符 </th><th style="FONT-SIZE: 12px" align="left">描述</th></tr><tr><td style="FONT-SIZE: 12px">\ </td><td style="FONT-SIZE: 12px">转义符</td></tr><tr><td style="FONT-SIZE: 12px">(), (?:), (?=), [] </td><td style="FONT-SIZE: 12px">圆括号和方括号</td></tr><tr><td style="FONT-SIZE: 12px">*, +, ?, {n}, {n,}, {n,m} </td><td style="FONT-SIZE: 12px">限定符</td></tr><tr><td style="FONT-SIZE: 12px">^, $, \anymetacharacter </td><td style="FONT-SIZE: 12px">位置和顺序</td></tr><tr><td style="FONT-SIZE: 12px">| </td><td style="FONT-SIZE: 12px">“或”操作</td></tr></tbody></table><h2><a name="5._全部符号解释">5. 全部符号解释</a></h2><table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th style="FONT-SIZE: 12px" align="left">字符 </th><th style="FONT-SIZE: 12px" align="left">描述</th></tr><tr><td style="FONT-SIZE: 12px">\ </td><td style="FONT-SIZE: 12px">将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。</td></tr><tr><td style="FONT-SIZE: 12px">^ </td><td style="FONT-SIZE: 12px">匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。</td></tr><tr><td style="FONT-SIZE: 12px">$ </td><td style="FONT-SIZE: 12px">匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。</td></tr><tr><td style="FONT-SIZE: 12px">* </td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。</td></tr><tr><td style="FONT-SIZE: 12px">+ </td><td style="FONT-SIZE: 12px">匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。</td></tr><tr><td style="FONT-SIZE: 12px">? </td><td style="FONT-SIZE: 12px">匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。</td></tr><tr><td style="FONT-SIZE: 12px">{n} </td><td style="FONT-SIZE: 12px">n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</td></tr><tr><td style="FONT-SIZE: 12px">{n,} </td><td style="FONT-SIZE: 12px">n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。</td></tr><tr><td style="FONT-SIZE: 12px">{n,m} </td><td style="FONT-SIZE: 12px">m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</td></tr><tr><td style="FONT-SIZE: 12px">? </td><td style="FONT-SIZE: 12px">当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。</td></tr><tr><td style="FONT-SIZE: 12px">. </td><td style="FONT-SIZE: 12px">匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。</td></tr><tr><td style="FONT-SIZE: 12px">(pattern) </td><td style="FONT-SIZE: 12px">匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。</td></tr><tr><td style="FONT-SIZE: 12px">(?:pattern) </td><td style="FONT-SIZE: 12px">匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。</td></tr><tr><td style="FONT-SIZE: 12px">(?=pattern) </td><td style="FONT-SIZE: 12px">正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。</td></tr><tr><td style="FONT-SIZE: 12px">(?!pattern) </td><td style="FONT-SIZE: 12px">负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始</td></tr><tr><td style="FONT-SIZE: 12px">x|y </td><td style="FONT-SIZE: 12px">匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。</td></tr><tr><td style="FONT-SIZE: 12px">[xyz] </td><td style="FONT-SIZE: 12px">字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。</td></tr><tr><td style="FONT-SIZE: 12px">[^xyz] </td><td style="FONT-SIZE: 12px">负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。</td></tr><tr><td style="FONT-SIZE: 12px">[a-z] </td><td style="FONT-SIZE: 12px">字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。</td></tr><tr><td style="FONT-SIZE: 12px">[^a-z] </td><td style="FONT-SIZE: 12px">负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。</td></tr><tr><td style="FONT-SIZE: 12px">\b </td><td style="FONT-SIZE: 12px">匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。</td></tr><tr><td style="FONT-SIZE: 12px">\B </td><td style="FONT-SIZE: 12px">匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。</td></tr><tr><td style="FONT-SIZE: 12px">\cx </td><td style="FONT-SIZE: 12px">匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。</td></tr><tr><td style="FONT-SIZE: 12px">\d </td><td style="FONT-SIZE: 12px">匹配一个数字字符。等价于 [0-9]。</td></tr><tr><td style="FONT-SIZE: 12px">\D </td><td style="FONT-SIZE: 12px">匹配一个非数字字符。等价于 [^0-9]。</td></tr><tr><td style="FONT-SIZE: 12px">\f </td><td style="FONT-SIZE: 12px">匹配一个换页符。等价于 \x0c 和 \cL。</td></tr><tr><td style="FONT-SIZE: 12px">\n </td><td style="FONT-SIZE: 12px">匹配一个换行符。等价于 \x0a 和 \cJ。</td></tr><tr><td style="FONT-SIZE: 12px">\r </td><td style="FONT-SIZE: 12px">匹配一个回车符。等价于 \x0d 和 \cM。</td></tr><tr><td style="FONT-SIZE: 12px">\s </td><td style="FONT-SIZE: 12px">匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。</td></tr><tr><td style="FONT-SIZE: 12px">\S </td><td style="FONT-SIZE: 12px">匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。</td></tr><tr><td style="FONT-SIZE: 12px">\t </td><td style="FONT-SIZE: 12px">匹配一个制表符。等价于 \x09 和 \cI。</td></tr><tr><td style="FONT-SIZE: 12px">\v </td><td style="FONT-SIZE: 12px">匹配一个垂直制表符。等价于 \x0b 和 \cK。</td></tr><tr><td style="FONT-SIZE: 12px">\w </td><td style="FONT-SIZE: 12px">匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。</td></tr><tr><td style="FONT-SIZE: 12px">\W </td><td style="FONT-SIZE: 12px">匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。</td></tr><tr><td style="FONT-SIZE: 12px">\xn </td><td style="FONT-SIZE: 12px">匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。.</td></tr><tr><td style="FONT-SIZE: 12px">\num </td><td style="FONT-SIZE: 12px">匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。</td></tr><tr><td style="FONT-SIZE: 12px">\n </td><td style="FONT-SIZE: 12px">标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。</td></tr><tr><td style="FONT-SIZE: 12px">\nm </td><td style="FONT-SIZE: 12px">标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。</td></tr><tr><td style="FONT-SIZE: 12px">\nml </td><td style="FONT-SIZE: 12px">如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。</td></tr><tr><td style="FONT-SIZE: 12px">\un </td><td style="FONT-SIZE: 12px">匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。</td></tr></tbody></table><p>　</p><h2><a name="6._部分例子">6. 部分例子</a></h2><table cellspacing="1" cellpadding="3" border="0"><tbody><tr><th style="FONT-SIZE: 12px" align="left">正则表达式</th><th style="FONT-SIZE: 12px" align="left">说明</th></tr><tr><td style="FONT-SIZE: 12px">/\b([a-z]+) \1\b/gi</td><td style="FONT-SIZE: 12px">一个单词连续出现的位置</td></tr><tr><td style="FONT-SIZE: 12px">/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ </td><td style="FONT-SIZE: 12px">将一个URL解析为协议、域、端口及相对路径</td></tr><tr><td style="FONT-SIZE: 12px">/^(?:Chapter|Section) [1-9][0-9]{0,1}$/</td><td style="FONT-SIZE: 12px">定位章节的位置</td></tr><tr><td style="FONT-SIZE: 12px">/[-a-z]/</td><td style="FONT-SIZE: 12px">A至z共26个字母再加一个-号。</td></tr><tr><td style="FONT-SIZE: 12px">/ter\b/</td><td style="FONT-SIZE: 12px">可匹配chapter，而不能terminal</td></tr><tr><td style="FONT-SIZE: 12px">/\Bapt/</td><td style="FONT-SIZE: 12px">可匹配chapter，而不能aptitude</td></tr><tr><td style="FONT-SIZE: 12px">/Windows(?=95 |98 |NT )/</td><td style="FONT-SIZE: 12px">可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后，从Windows后面开始进行下一次的检索匹配。</td></tr></tbody></table><p>　</p><h2><a name="7._正则表达式匹配规则">7. 正则表达式匹配规则</a></h2><p><b><a name="7.1_基本模式匹配">7.1 基本模式匹配</a></b><br /><br />　　一切从最基本的开始。模式，是正规表达式最基本的元素，它们是一组描述字符串特征的字符。模式可以很简单，由普通的字符串组成，也可以非常复杂，往往用特殊的字符表示一个范围内的字符、重复出现，或表示上下文。例如：</p><blockquote><p>^once </p></blockquote><p>　　这个模式包含一个特殊的字符^，表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配，与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样，$符号用来匹配那些以给定模式结尾的字符串。</p><blockquote><p>bucket$ </p></blockquote><p>　　这个模式与"Who kept all of this cash in a bucket"匹配，与"buckets"不匹配。字符^和$同时使用时，表示精确匹配（字符串与模式一样）。例如：</p><blockquote><p>^bucket$ </p></blockquote><p>　　只匹配字符串"bucket"。如果一个模式不包括^和$，那么它与任何包含该模式的字符串匹配。例如：模式</p><blockquote><p>once </p></blockquote><p>与字符串</p><blockquote><p>There once was a man from NewYork<br />Who kept all of his cash in a bucket.</p></blockquote><p>是匹配的。<br /><br />　　在该模式中的字母(o-n-c-e)是字面的字符，也就是说，他们表示该字母本身，数字也是一样的。其他一些稍微复杂的字符，如标点符号和白字符（空格、制表符等），要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是：\t。所以如果我们要检测一个字符串是否以制表符开头，可以用这个模式：</p><blockquote><p>^\t </p></blockquote><p>类似的，用\n表示“新行”，\r表示回车。其他的特殊符号，可以用在前面加上反斜杠，如反斜杠本身用\\表示，句号.用\.表示，以此类推。<br /><br /><b><a name="7.2_字符簇">7.2 字符簇</a></b><br /><br />在INTERNET的程序中，正规表达式通常用来验证用户的输入。当用户提交一个FORM以后，要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效，用普通的基于字面的字符是不够的。<br /><br />所以要用一种更自由的描述我们要的模式的办法，它就是字符簇。要建立一个表示所有元音字符的字符簇，就把所有的元音字符放在一个方括号里：</p><blockquote><p>[AaEeIiOoUu] </p></blockquote><p>这个模式与任何元音字符匹配，但只能表示一个字符。用连字号可以表示一个字符的范围，如：</p><blockquote><p>[a-z] //匹配所有的小写字母 <br />[A-Z] //匹配所有的大写字母 <br />[a-zA-Z] //匹配所有的字母 <br />[0-9] //匹配所有的数字 <br />[0-9\.\-] //匹配所有的数字，句号和减号 <br />[ \f\r\t\n] //匹配所有的白字符 </p></blockquote><p>同样的，这些也只表示一个字符，这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串，比如"z2"、"t6"或"g7"，但不是"ab2"、"r2d3" 或"b52"的话，用这个模式：</p><blockquote><p>^[a-z][0-9]$ </p></blockquote><p>尽管[a-z]代表26个字母的范围，但在这里它只能与第一个字符是小写字母的字符串匹配。<br /><br />前面曾经提到^表示字符串的开头，但它还有另外一个含义。当在一组方括号里使用^是，它表示“非”或“排除”的意思，常常用来剔除某个字符。还用前面的例子，我们要求第一个字符不能是数字：</p><blockquote><p>^[^0-9][0-9]$ </p></blockquote><p>这个模式与"&amp;5"、"g7"及"-2"是匹配的，但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子：</p><blockquote><p>[^a-z] //除了小写字母以外的所有字符 <br />[^\\\/\^] //除了(\)(/)(^)之外的所有字符 <br />[^\"\'] //除了双引号(")和单引号(')之外的所有字符 </p></blockquote><p>特殊字符"." (点，句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。模式"."可以匹配任何字符串，除了空串和只包括一个“新行”的字符串。<br /><br />PHP的正规表达式有一些内置的通用字符簇，列表如下：</p><blockquote><p>字符簇 含义 <br />[[:alpha:]] 任何字母 <br />[[:digit:]] 任何数字 <br />[[:alnum:]] 任何字母和数字 <br />[[:space:]] 任何白字符 <br />[[:upper:]] 任何大写字母 <br />[[:lower:]] 任何小写字母 <br />[[:punct:]] 任何标点符号 <br />[[:xdigit:]] 任何16进制的数字，相当于[0-9a-fA-F] </p></blockquote><p><b><a name="7.3_确定重复出现">7.3 确定重复出现</a></b><br /><br />到现在为止，你已经知道如何去匹配一个字母或数字，但更多的情况下，可能要匹配一个单词或一组数字。一个单词有若干个字母组成，一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。 </p><blockquote><p>字符簇 含义 <br />^[a-zA-Z_]$ 所有的字母和下划线 <br />^[[:alpha:]]{3}$ 所有的3个字母的单词 <br />^a$ 字母a <br />^a{4}$ aaaa <br />^a{2,4}$ aa,aaa或aaaa <br />^a{1,3}$ a,aa或aaa <br />^a{2,}$ 包含多于两个a的字符串 <br />^a{2,} 如：aardvark和aaab，但apple不行 <br />a{2,} 如：baad和aaa，但Nantucket不行 <br />\t{2} 两个制表符 <br />.{2} 所有的两个字符 </p></blockquote><p>这些例子描述了花括号的三种不同的用法。一个数字，{x}的意思是“前面的字符或字符簇只出现x次”；一个数字加逗号，{x,}的意思是“前面的内容出现x或更多的次数”；两个用逗号分隔的数字，{x,y}表示“前面的内容至少出现x次，但不超过y次”。我们可以把模式扩展到更多的单词或数字：</p><blockquote><p>^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 <br />^[0-9]{1,}$ //所有的正数 <br />^\-{0,1}[0-9]{1,}$ //所有的整数 <br />^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数 </p></blockquote><p>最后一个例子不太好理解，是吗？这么看吧：与所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,})，并且没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。<br /><br />特殊字符"?"与{0,1}是相等的，它们都代表着：“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为：</p><blockquote><p>^\-?[0-9]{0,}\.?[0-9]{0,}$ </p></blockquote><p>特殊字符"*"与{0,}是相等的，它们都代表着“0个或多个前面的内容”。最后，字符"+"与 {1,}是相等的，表示“1个或多个前面的内容”，所以上面的4个例子可以写成：</p><blockquote><p>^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 <br />^[0-9]+$ //所有的正数 <br />^\-?[0-9]+$ //所有的整数 <br />^\-?[0-9]*\.?[0-9]*$ //所有的小数 </p></blockquote><p>当然这并不能从技术上降低正规表达式的复杂性，但可以使它们更容易阅读。</p><p>　</p><p>参考文献：<br /><a href="http://www.soulogic.com/code/doc/RegularExpressions/">JScript 和 VBScript 正则表达式</a></p><p>微软MSDN上的例子(英文)：</p><layer visibility="hide"><base target="_top" /><table class="clsContainer" style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="15" width="100%" border="0" float="left"><tbody><tr><td valign="top"><div id="nstext0" valign="bottom"><dl><dt><a href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconexamplescanningforhrefs.asp"><font size="1">Scanning for HREFS</font></a><font size="1"></font></dt><dd><font size="1">Provides an example that searches an input string and prints out all the href="..." values and their locations in the string. </font></dd><dt><a href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconexamplechangingdateformats.asp"><font size="1">Changing Date Formats</font></a><font size="1"></font></dt><dd><font size="1">Provides an example that replaces dates of the form mm/dd/yy with dates of the form dd-mm-yy. </font></dd><dt><a href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconexampleextractingurlinformation.asp"><font size="1">Extracting URL Information</font></a><font size="1"></font></dt><dd><font size="1">Provides an example that extracts a protocol and port number from a string containing a URL. For example, "http://www.contoso.com:8080/letters/readme.html" returns "http:8080". </font></dd><dt><a href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconexamplecleaninginputstring.asp"><font size="1">Cleaning an Input String</font></a><font size="1"></font></dt><dd><font size="1">provides an example that strips invalid non-alphanumeric characters from a string. </font></dd><dt><a href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconexampleconfirmingvalidemailformat.asp"><font size="1">Confirming Valid E-Mail Format</font></a><font size="1"></font></dt><dd><font size="1">Provides an example that you can use to verify that a string is in valid e-mail format. </font></dd></dl></div></td></tr></tbody></table></layer><img src ="http://www.blogjava.net/coderdream/aggbug/75081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-14 00:25 <a href="http://www.blogjava.net/coderdream/archive/2006/10/14/75081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 正则表达式在javascript中的几个实例</title><link>http://www.blogjava.net/coderdream/archive/2006/10/14/75080.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/14/75080.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75080.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/14/75080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75080.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75080.html</trackback:ping><description><![CDATA[
		<p>! 去除字符串两端空格的处理</p>
		<p>如果采用传统的方式,就要可能就要采用下面的方式了<br />//清除左边空格<br />function js_ltrim(deststr)<br />{<br /> if(deststr==null)return "";<br /> var pos=0;<br /> var retStr=new String(deststr);<br /> if (retStr.lenght==0) return retStr;<br /> while (retStr.substring(pos,pos+1)==" ") pos++;<br /> retStr=retStr.substring(pos);<br /> return(retStr);<br />}<br />//清除右边空格<br />function js_rtrim(deststr)<br />{<br /> if(deststr==null)return "";<br /> var retStr=new String(deststr);<br /> var pos=retStr.length;<br /> if (pos==0) return retStr;<br /> while (pos &amp;&amp; retStr.substring(pos-1,pos)==" " ) pos--;<br /> retStr=retStr.substring(0,pos);<br /> return(retStr);<br />}<br />//清除左边和右边空格<br />function js_trim(deststr)<br />{<br /> if(deststr==null)return "";<br /> var retStr=new String(deststr);<br /> var pos=retStr.length;<br /> if (pos==0) return retStr;<br /> retStr=js_ltrim(retStr);<br /> retStr=js_rtrim(retStr);<br /> return retStr;<br />}</p>
		<p>采用正则表达式,来去除两边的空格,只需以下代码<br />String.prototype.trim = function()<br />{<br />return this.replace(/(^\s*)|(\s*$)/g, "");<br />}</p>
		<p>一句就搞定了,<br />可见正则表达式为我们节省了相当的编写代码量</p>
		<p>
				<br />! 移动手机号的校验</p>
		<p>如果采用传统的校验方式至少就要完成下面三步的校验,<br />(1). 是否是数字<br />(2).是否是11位<br />(3).数字的第三位是否是5,6,7,8,9<br />如果采用正则表达式校验,只需以下代码<br />function checkMobile1(form) <br />{<br />if (form.mobile.value &gt; "")<br />{<br />var reg=/13[5,6,7,8,9]\d{8}/; <br />if ( form.mobile.value.match(reg)== null)<br />{ <br />alert("请输入正确的移动手机号码！"); <br />form.mobile.focus(); return false;<br /> } <br />} <br />return true; <br />}</p>
		<p>从上面的代码可以看出校验移动手机号只需定义一个var reg=/13[5,6,7,8,9]\d{8}/;模式匹配串就可以完成合法性校验了</p>
		<p>! URL的校验,<br />条件:必须以http:// 或 https:// 开头, 端口号必须为在1－65535 之间, 以下代码完成了合法性校验</p>
		<p>//obj:数据对象<br />//dispStr :失败提示内容显示字符串<br />function checkUrlValid( obj,  dispStr)<br />{<br /> if(obj  == null)<br /> {<br />  alert("传入对象为空");<br />  return false;<br /> }<br /> var str = obj.value;</p>
		<p> var  urlpatern0 = /^https?:\/\/.+$/i;<br /> if(!urlpatern0.test(str))<br /> {<br />  alert(dispStr+"不合法：必须以'http:\/\/'或'https:\/\/'开头!");<br />  obj.focus();<br />  return false;<br /> }</p>
		<p> var  urlpatern2= /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?.+$/i;<br /> if(!urlpatern2.test(str))<br /> {<br />  alert(dispStr+"端口号必须为数字且应在1－65535之间!");<br />  obj.focus();<br />  return false;<br /> }</p>
		<p>
				<br /> var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&amp;?[a-zA-Z0-9_-](\?)?)*)*$/i;</p>
		<p> if(!urlpatern1.test(str))<br /> {<br />  alert(dispStr+"不合法,请检查!");<br />  obj.focus();<br />  return false;<br /> }</p>
		<p> var s = "0";<br /> var t =0;<br />  var re = new RegExp(":\\d+","ig");<br />  while((arr = re.exec(str))!=null)<br /> {<br />  s = str.substring(RegExp.index+1,RegExp.lastIndex);</p>
		<p>  if(s.substring(0,1)=="0")<br />  {<br />   alert(dispStr+"端口号不能以0开头!");<br />   obj.focus();<br />   return false;<br />  }</p>
		<p>  t = parseInt(s);<br />  if(t&lt;1 || t &gt;65535)<br />  {<br />   alert(dispStr+"端口号必须为数字且应在1－65535之间!");<br />   obj.focus();<br />   return false;<br />  }<br /> }<br /> return true;<br />}<br />  <br />对url的校验,看上去有很多的代码,这是因为要给予出错提示, 否则只需var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&amp;?[a-zA-Z0-9_-](\?)?)*)*$/i; 一句就可以校验出url合法性了。<br /><br /></p>
		<p>javascript正则表达式检验 <br />/********************************************************************************* <br />* EO_JSLib.js <br />* javascript正则表达式检验 <br />**********************************************************************************/ </p>
		<p>//校验是否全由数字组成 <br />function isDigit(s) <br />{ <br />var patrn=/^[0-9]{1,20}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验登录名：只能输入5-20个以字母开头、可带数字、“_”、“.”的字串 <br />function isRegisterUserName(s) <br />{ <br />var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验用户姓名：只能输入1-30个以字母开头的字串 <br />function isTrueName(s) <br />{ <br />var patrn=/^[a-zA-Z]{1,30}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验密码：只能输入6-20个字母、数字、下划线 <br />function isPasswd(s) <br />{ <br />var patrn=/^(\w){6,20}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验普通电话、传真号码：可以“+”开头，除数字外，可含有“-” <br />function isTel(s) <br />{ <br />//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/; <br />var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验手机号码：必须以数字开头，除数字外，可含有“-” <br />function isMobil(s) <br />{ <br />var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验邮政编码 <br />function isPostalCode(s) <br />{ <br />//var patrn=/^[a-zA-Z0-9]{3,12}$/; <br />var patrn=/^[a-zA-Z0-9 ]{3,12}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>//校验搜索关键字 <br />function isSearch(s) <br />{ <br />var patrn=/^[^`~!@#$%^&amp;*()+=|\\\][\]\{\}:;'\,.&lt;&gt;/?]{1}[^`~!@$%^&amp;()+=|\\\][\]\{\}:;'\,.&lt;&gt;?]{0,19}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />} </p>
		<p>function isIP(s) //by zergling <br />{ <br />var patrn=/^[0-9.]{1,20}$/; <br />if (!patrn.exec(s)) return false <br />return true <br />}</p>
		<p>（ip,email,data,time）</p>
		<p>&lt;script language="javascript"&gt;<br />    var patterns = new Object();</p>
		<p>    //匹配ip地址<br />    patterns.ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;</p>
		<p>    //匹配邮件地址<br />    patterns.email = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;</p>
		<p>    //匹配日期格式2008-01-31，但不匹配2008-13-00<br />    patterns.date = /^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/;<br />    <br />    /**//*匹配时间格式00:15:39，但不匹配24:60:00，下面使用RegExp对象的构造方法<br />    来创建RegExp对象实例，注意正则表达式模式文本中的“\”要写成“\\”*/<br />    patterns.time = new RegExp("^([0-1]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$");<br />        <br />    /**//*verify – 校验一个字符串是否符合某种模式<br />     *str – 要进行校验的字符串<br />     *pat – 与patterns中的某个正则表达式模式对应的属性名称<br />     */<br />    function verify(str,pat)<br />    {        <br />        thePat = patterns[pat];<br />        if(thePat.test(str))<br />        {<br />            return true;<br />        }<br />        else<br />        {<br />            return false;<br />        }<br />    }<br />&lt;/script&gt;<br /></p>
<img src ="http://www.blogjava.net/coderdream/aggbug/75080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-14 00:09 <a href="http://www.blogjava.net/coderdream/archive/2006/10/14/75080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>揭开正则表达式语法的神秘面纱 </title><link>http://www.blogjava.net/coderdream/archive/2006/10/14/75078.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 16:03:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/14/75078.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75078.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/14/75078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75078.html</trackback:ping><description><![CDATA[
		<table class="border_zy" cellspacing="0" cellpadding="0" width="740" align="center" bgcolor="#ffffff" border="0">
				<tbody>
						<tr>
								<td valign="top" height="200">
										<font face="Courier New">正则表达式(REs)通常被错误地认为是只有少数人理解的一种神秘语言。在表面上它们确实看起来杂乱无章，如果你不知道它的语法，那么它的代码在你眼里只是一堆文字垃圾而已。实际上，正则表达式是非常简单并且可以被理解。读完这篇文章后，你将会通晓正则表达式的通用语法。<br /><br />支持多种平台<br /></font>
										<p>
												<font face="Courier New">正则表达式最早是由数学家Stephen Kleene于1956年提出，他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用在字符的格式匹配方面上，后来被应用到熔融信息技术领域。自从那时起，正则表达式经过几个时期的发展，现在的标准已经被ISO(国际标准组织)批准和被Open Group组织认定。</font>
										</p>
										<p>
												<font face="Courier New">正则表达式并非一门专用语言，但它可用于在一个文件或字符里查找和替代文本的一种标准。它具有两种标准：基本的正则表达式(BRE)，扩展的正则表达式(ERE)。ERE包括BRE功能和另外其它的概念。</font>
										</p>
										<p>
												<font face="Courier New">许多程序中都使用了正则表达式，包括xsh,egrep,sed,vi以及在UNIX平台下的程序。它们可以被很多语言采纳，如HTML 和XML，这些采纳通常只是整个标准的一个子集。</font>
										</p>
										<h5>
												<font face="Courier New">比你想象的还要普通</font>
										</h5>
										<p>
												<font face="Courier New">随着正则表达式移植到交叉平台的程序语言的发展，这的功能也日益完整，使用也逐渐广泛。网络上的搜索引擎使用它，e-mail程序也使用它，即使你不是一个UNIX程序员，你也可以使用规则语言来简化你的程序而缩短你的开发时间。</font>
										</p>
										<h5>
												<font face="Courier New">正则表达式101</font>
										</h5>
										<p>
												<font face="Courier New">很多正则表达式的语法看起来很相似，这是因为你以前你没有研究过它们。通配符是RE的一个结构类型，即重复操作。让我们先看一看ERE标准的最通用的基本语法类型。为了能够提供具有特定用途的范例，我将使用几个不同的程序。<br /></font>
										</p>
										<h5>
												<font face="Courier New">字符匹配</font>
										</h5>
										<p>
												<font face="Courier New">
														<br />
														<font size="+0">
														</font>
												</font>
										</p>
										<p>
												<font face="Courier New">正则表达式的关键之处在于确定你要搜索匹配的东西，如果没有这一概念，Res将毫无用处。<br /><br />每一个表达式都包含需要查找的指令，如表A所示。</font>
										</p>
										<div align="center">
												<table bordercolor="#eeeeee" cellspacing="0" cellpadding="0" border="1">
														<tbody>
																<tr>
																		<td colspan="4">
																				<p align="center">
																						<font face="Courier New">Table A: Character-matching regular expressions</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">操作</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">解释</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">例子</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">结果</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">.</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">Match any one character</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">grep .ord sample.txt</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">Will match “ford”, “lord”, “2ord”, etc. in the file sample.txt.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">[ ]</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">Match any one character listed between the brackets</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">grep [cng]ord sample.txt</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">Will match only “cord”, “nord”, and “gord”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">[^ ]</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">Match any one character not listed between the brackets</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">grep [^cn]ord sample.txt</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">Will match “lord”, “2ord”, etc. but not “cord” or “nord”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">grep [a-zA-Z]ord sample.txt</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">Will match “aord”, “bord”, “Aord”, “Bord”, etc.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="34">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="226">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="138">
																				<p>
																						<font face="Courier New">grep [^0-9]ord sample.txt</font>
																				</p>
																		</td>
																		<td width="287">
																				<p>
																						<font face="Courier New">Will match “Aord”, “aord”, etc. but not “2ord”, etc.</font>
																				</p>
																		</td>
																</tr>
														</tbody>
												</table>
										</div>
										<h5>
												<br />
												<font face="Courier New">重复操作符</font>
										</h5>
										<p>
												<font face="Courier New">重复操作符，或数量词，都描述了查找一个特定字符的次数。它们常被用于字符匹配语法以查找多行的字符，可参见表B。</font>
										</p>
										<div align="center">
												<table bordercolor="#eeeeee" cellspacing="0" cellpadding="0" border="1">
														<tbody>
																<tr>
																		<td colspan="4">
																				<p align="center">
																						<font face="Courier New">Table B: Regular expression repetition operators</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">操作</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">解释</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">例子</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">结果</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">?</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match any character one time, if it exists</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “?erd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “berd”, “herd”, etc. and “erd”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">*</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match declared element multiple times, if it exists</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “n.*rd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “nerd”, “nrd”, “neard”, etc.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">+</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match declared element one or more times</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “[n]+erd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “nerd”, “nnerd”, etc., but not “erd”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">{n}</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match declared element exactly n times</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “[a-z]{2}erd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “cherd”, “blerd”, etc. but not “nerd”, “erd”, “buzzerd”, etc.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">{n,}</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match declared element at least n times</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “.{2,}erd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “cherd” and “buzzerd”, but not “nerd”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="35">
																				<p>
																						<font face="Courier New">{n,N}</font>
																				</p>
																		</td>
																		<td width="247">
																				<p>
																						<font face="Courier New">Match declared element at least n times, but not more than N times</font>
																				</p>
																		</td>
																		<td width="125">
																				<p>
																						<font face="Courier New">egrep “n[e]{1,2}rd” sample.txt</font>
																				</p>
																		</td>
																		<td width="268">
																				<p>
																						<font face="Courier New">Will match “nerd” and “neerd”</font>
																				</p>
																		</td>
																</tr>
														</tbody>
												</table>
										</div>
										<font face="Courier New">锚 </font>
										<p>
												<font face="Courier New">锚是指它所要匹配的格式，如图C所示。使用它能方便你查找通用字符的合并。例如，我用vi行编辑器命令:s来代表substitute，这一命令的基本语法是：</font>
										</p>
										<p align="left">
												<font face="Courier New">
														<font size="+0">
																<i>
																		<font color="#000099">s/pattern_to_match/pattern_to_substitute/</font>
																</i>
																<br /> </font>
												</font>
										</p>
										<div align="center">
												<table bordercolor="#eeeeee" cellspacing="0" cellpadding="0" border="1">
														<tbody>
																<tr>
																		<td colspan="4">
																				<p align="center">
																						<font face="Courier New">Table C: Regular expression anchors</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">操作</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">解释</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">例子</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">结果</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">^</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match at the beginning of a line</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">s/^/blah /</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Inserts “blah “ at the beginning of the line</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">$</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match at the end of a line</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">s/$/ blah/</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Inserts “ blah” at the end of the line</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">\&lt;</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match at the beginning of a word</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">s/\&lt;/blah/</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Inserts “blah” at the beginning of the word</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">egrep “\&lt;blah” sample.txt</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Matches “blahfield”, etc.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">\&gt;</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match at the end of a word</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">s/\&gt;/blah/</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Inserts “blah” at the end of the word</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">
																						</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">egrep “\&gt;blah” sample.txt</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Matches “soupblah”, etc.</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">\b</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match at the beginning or end of a word</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">egrep “\bblah” sample.txt</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Matches “blahcake” and “countblah”</font>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td width="40">
																				<p>
																						<font face="Courier New">\B</font>
																				</p>
																		</td>
																		<td width="239">
																				<p>
																						<font face="Courier New">Match in the middle of a word</font>
																				</p>
																		</td>
																		<td width="132">
																				<p>
																						<font face="Courier New">egrep “\Bblah” sample.txt</font>
																				</p>
																		</td>
																		<td width="264">
																				<p>
																						<font face="Courier New">Matches “sublahper”, etc.</font>
																				</p>
																		</td>
																</tr>
														</tbody>
												</table>
										</div>
										<br />
										<h5>
												<font face="Courier New">间隔</font>
										</h5>
										<p>
												<font face="Courier New">
												</font>
										</p>
										<p>
												<font face="Courier New">Res中的另一可便之处是间隔(或插入)符号。实际上，这一符号相当于一个OR语句并代表|符号。下面的语句返回文件sample.txt中的“nerd” 和 “merd”的句柄：</font>
										</p>
										<p>
												<font face="Courier New">
														<font size="+0">
																<font color="#000099">egrep “(n|m)erd” sample.txt</font>
																<br />
														</font>
												</font>
										</p>
										<p>
												<font face="Courier New">间隔功能非常强大，特别是当你寻找文件不同拼写的时候，但你可以在下面的例子得到相同的结果：</font>
										</p>
										<p>
												<font face="Courier New" color="#000099">egrep “[nm]erd” sample.txt</font>
										</p>
										<p>
												<font face="Courier New">当你使用间隔功能与Res的高级特性连接在一起时，它的真正用处更能体现出来。<br /></font>
										</p>
										<h5>
												<font face="Courier New">一些保留字符</font>
										</h5>
										<p>
												<font face="Courier New">Res的最后一个最重要特性是保留字符(也称特定字符)。例如，如果你想要查找“ne*rd”和“ni*rd”的字符，格式匹配语句“n[ei]*rd”与“neeeeerd” 和 “nieieierd”相符合，但并不是你要查找的字符。因为‘*’(星号)是个保留字符，你必须用一个反斜线符号来替代它，即：“n[ei]\*rd”。其它的保留字符包括：</font>
										</p>
										<ul type="disc">
												<li>
														<font face="Courier New" color="#000099">^ (carat) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">. (period) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">[ (left bracket} </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">$ (dollar sign) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">( (left parenthesis) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">) (right parenthesis) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">| (pipe) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">* (asterisk) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">+ (plus symbol) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">? (question mark) </font>
												</li>
												<li>
														<font face="Courier New" color="#000099">{ (left curly bracket, or left brace) </font>
												</li>
												<li>
														<font face="Courier New">
																<font size="+0">
																		<font color="#000099">\ backslash</font>
																</font>
														</font>
												</li>
										</ul>
										<p>
												<font face="Courier New">一旦你把以上这些字符包括在你的字符搜索中，毫无疑问Res变得非常的难读。比如说以下的PHP中的eregi搜索引擎代码就很难读了。</font>
										</p>
										<p>
												<font face="Courier New" color="#000099">eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$sendto)</font>
										</p>
										<p>
												<font face="Courier New">你可以看到，程序的意图很难把握。但如果你抛开保留字符，你常常会错误地理解代码的意思。</font>
										</p>
										<h5>
												<font face="Courier New">总结</font>
										</h5>
										<p>
												<font face="Courier New">在本文中，我们揭开了正则表达式的神秘面纱，并列出了ERE标准的通用语法。如果你想阅览Open Group组织的规则的完整描述，你可以参见：</font>
												<a href="http://www.opengroup.org/onlinepubs/7908799/xbd/re.html" target="_blank">
														<font face="Courier New" color="#002c99">
																<u>Regular Expressions</u>
														</font>
												</a>
												<font face="Courier New">，欢迎你在其中的讨论区发表你的问题或观点。</font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/coderdream/aggbug/75078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-14 00:03 <a href="http://www.blogjava.net/coderdream/archive/2006/10/14/75078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]正则表达式使用详解</title><link>http://www.blogjava.net/coderdream/archive/2006/10/13/75077.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 15:57:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/13/75077.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75077.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/13/75077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75077.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td align="middle">
										<strong>
										</strong>
								</td>
						</tr>
						<tr>
								<td align="left">
										<p>　　如果我们问那些UNIX系统的爱好者他们最喜欢什么，答案除了稳定的系统和可以远程启动之外，十有八九的人会提到正则表达式；如果我们再问他们最头痛的是什么，可能除了复杂的进程控制和安装过程之外，还会是正则表达式。那么正则表达式到底是什么？如何才能真正的掌握正则表达式并正确的加以灵活运用？本文将就此展开介绍，希望能够对那些渴望了解和掌握正则表达式的读者有所助益。</p>
										<p>入门简介</p>
										<p>　　简单的说，正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影，例如，vi编辑器，Perl或PHP脚本语言，以及awk或sed shell程序等。此外，象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见，正则表达式已经超出了某种语言或某个系统的局限，成为人们广为接受的概念和功能。</p>
										<p>　　正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式，然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较，根据比较对象中是否包含匹配模式，执行相应的程序。</p>
										<p>　　举例来说，正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确，用户所填写的表单信息将会被正常处理；反之，如果用户输入的邮件地址与正则表达的模式不匹配，将会弹出提示信息，要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。</p>
										<p>基本语法</p>
										<p>　　在对正则表达式的功能和作用有了初步的了解之后，我们就来具体看一下正则表达式的语法格式。</p>
										<p>　　正则表达式的形式一般如下：</p>
										<p>　　/love/</p>
										<p>　　其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容，正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符，可以用来规定其前导字符（即位于元字符前面的字符）在目标对象中的出现模式。</p>
										<p>　　较为常用的元字符包括： “+”， “*”，以及 “?”。其中，“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次，“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次，而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。</p>
										<p>　　下面，就让我们来看一下正则表达式元字符的具体应用。</p>
										<p>　　/fo+/</p>
										<p>　　因为上述正则表达式中包含“+”元字符，表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。</p>
										<p>　　/eg*/</p>
										<p>　　因为上述正则表达式中包含“*”元字符，表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。</p>
										<p>　　/Wil?/</p>
										<p>　　因为上述正则表达式中包含“？”元字符，表示可以与目标对象中的 “Will”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。</p>
										<p>　　除了元字符之外，用户还可以精确指定模式在匹配对象中出现的频率。例如，</p>
										<p>　　/jim{2,6}/</p>
										<p>　　上述正则表达式规定字符m可以在匹配对象中连续出现2-6次，因此，上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。</p>
										<p>　　在对如何使用正则表达式有了初步了解之后，我们来看一下其它几个重要的元字符的使用方式。</p>
										<p>　　s：用于匹配单个空格符，包括tab键和换行符；</p>
										<p>　　S：用于匹配除单个空格符之外的所有字符；</p>
										<p>　　d：用于匹配从0到9的数字；</p>
										<p>　　w：用于匹配字母，数字或下划线字符；</p>
										<p>　　W：用于匹配所有与w不匹配的字符；</p>
										<p>　　. ：用于匹配除换行符之外的所有字符。</p>
										<p>　　（说明：我们可以把s和S以及w和W看作互为逆运算）</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　下面，我们就通过实例看一下如何在正则表达式中使用上述元字符。</p>
		<p>　　/s+/</p>
		<p>　　上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。</p>
		<p>　　/d000/</p>
		<p>　　如果我们手中有一份复杂的财务报表，那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。</p>
		<p>　　除了我们以上所介绍的元字符之外，正则表达式中还具有另外一种较为独特的专用字符，即定位符。定位符用于规定匹配模式在目标对象中的出现位置。</p>
		<p>　　较为常用的定位符包括： “^”, “$”, “&#x8;” 以及 “B”。其中，“^”定位符规定匹配模式必须出现在目标字符串的开头，“$”定位符规定匹配模式必须出现在目标对象的结尾，&#x8;定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一，而“B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内，即匹配对象既不能作为目标字符串的开头，也不能作为目标字符串的结尾。同样，我们也可以把“^”和“$”以及“&#x8;”和“B”看作是互为逆运算的两组定位符。举例来说：</p>
		<p>　　/^hell/</p>
		<p>　　因为上述正则表达式中包含“^”定位符，所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。</p>
		<p>　　/ar$/</p>
		<p>　　因为上述正则表达式中包含“$”定位符，所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。</p>
		<p>　　/&#x8;bom/</p>
		<p>　　因为上述正则表达式模式以“&#x8;”定位符开头，所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。</p>
		<p>　　/man&#x8;/</p>
		<p>　　因为上述正则表达式模式以“&#x8;”定位符结尾，所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。</p>
		<p>　　为了能够方便用户更加灵活的设定匹配模式，正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如：</p>
		<p>　　/[A-Z]/</p>
		<p>　　上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。</p>
		<p>　　/[a-z]/</p>
		<p>　　上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。</p>
		<p>　　/[0-9]/</p>
		<p>　　上述正则表达式将会与从0到9范围内任何一个数字相匹配。</p>
		<p>　　/([a-z][A-Z][0-9])+/</p>
		<p>　　上述正则表达式将会与任何由字母和数字组成的字符串，如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此，上述正则表达式将无法与诸如 “abc”等的字符串匹配，因为“abc”中的最后一个字符为字母而非数字。</p>
		<p>　　如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算，在多个不同的模式中任选一个进行匹配的话，可以使用管道符 “|”。例如：</p>
		<p>　　/to|too|2/</p>
		<p>　　上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。</p>
		<p>　　正则表达式中还有一个较为常用的运算符，即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同，否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如：</p>
		<p>　　/[^A-C]/</p>
		<p>　　上述字符串将会与目标对象中除A，B，和C之外的任何字符相匹配。一般来说，当“^”出现在 “[]”内时就被视做否定运算符；而当“^”位于“[]”之外，或没有“[]”时，则应当被视做定位符。</p>
		<p>　　最后，当用户需要在正则表达式的模式中加入元字符，并查找其匹配对象时，可以使用转义符“”。例如：</p>
		<p>　　/Th*/</p>
		<p>　　上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。<br /><br /></p>
		<p>　　<strong>使用实例</strong></p>
		<p>　　在对正则表达式有了较为全面的了解之后，我们就来看一下如何在Perl，PHP，以及JavaScript中使用正则表达式。</p>
		<p>　　通常，Perl中正则表达式的使用格式如下：</p>
		<p>　　operator / regular-expression / string-to-replace / modifiers</p>
		<p>　　运算符一项可以是m或s，分别代表匹配运算和替换运算。</p>
		<p>　　其中，正则表达式一项是将要进行匹配或替换操作的模式，可以由任意字符，元字符，或定位符等组成。替换字符串一项是使用s运算符时，对查找到的模式匹配对象进行替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如：</p>
		<p>　　s/geed/good/</p>
		<p>　　将会在目标对象中查找第一个出现的geed字串，并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找—替换操作的话，可以使用参数 “g”，即s/love/lust/g。</p>
		<p>　　此外，如果我们不需要限制匹配的大小写形式的话，可以使用参数 “i ”。例如，</p>
		<p>　　m/JewEL/i</p>
		<p>　　上述正则表达式将会与目标对象中的jewel，Jewel，或JEWEL相匹配。</p>
		<p>　　在Perl中，使用专门的运算符“=~”指定正则表达式的匹配对象。例如：</p>
		<p>　　$flag =~ s/abc/ABC/</p>
		<p>　　上述正则表达式将会把变量$flag中的字串abc替换为ABC。</p>
		<p>　　下面，我们就在Perl程序中加入正则表达式，验证用户邮件地址格式的有效性。代码如下：</p>
		<p>　　#!/usr/bin/perl<br />　　# get input<br />　　print “What's your email address? ”;<br />　　$email = &lt;&gt;<br />　　chomp($email);<br />　　# match and display result<br />　　if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/)<br />　　{<br />　　print(“Your email address is correct! ”);<br />　　}<br />　　else<br />　　　{<br />　　　　print(“Please try again! ”);<br />　　　}<br /><br /></p>
		<p>　　如果用户更偏爱PHP的话，可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下：<br />　　 ereg(pattern, string)</p>
		<p>　　其中，pattern代表正则表达式的模式，而string则是执行查找替换操作的目标对象。同样是验证邮件地址，使用PHP编写的程序代码如下：</p>
		<p>　　&lt;?php<br />　　 if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+”,$email))<br />　　　 { echo “Your email address is correct!”;}<br />　　 else<br />　　　 { echo “Please try again!”;}<br />　　 ?&gt;<br />　　最后，我们在来看一下JavaScript。JavaScript 1.2中带有一个功能强大的RegExp()对象，可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式，并相应的返回true或false。</p>
		<p>　　我们可以使用JavaScript编写以下脚本，验证用户输入的邮件地址的有效性。</p>
		<p>　　&lt;html&gt;<br />　　 &lt;head&gt;<br />　　　 &lt; language="Javascript1.2"&gt;<br />　　　　 &lt;!-- start hiding<br />　　　　 function verifyAddress(obj)<br />　　　　　{<br />　　　　　　var email = obj.email.value;<br />　　　　　　var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;<br />　　　　　　flag = pattern.test(email);<br />　　　　　　if(flag)<br />　　　　　　{<br />　　　　　　　alert(“Your email address is correct!”);<br />　　　　　　　return true;<br />　　　　　　}<br />　　　　　　else<br />　　　　　　　{<br />　　　　　　　　alert(“Please try again!”);<br />　　　　　　　　return false;<br />　　　　　　　 }<br />　　　　　 }<br />　　　　 // stop hiding --&gt;<br />　　　 &lt;/script&gt;<br />　　　&lt;/head&gt;<br />　　 &lt;body&gt;<br />　　 &lt;form onSubmit="return verifyAddress(this);"&gt;<br />　　　&lt;input name="email" type="text"&gt;<br />　　　&lt;input type="submit" value="提交"&gt;<br />　　　&lt;/form&gt;<br />　　&lt;/body&gt;<br />　&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/coderdream/aggbug/75077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-13 23:57 <a href="http://www.blogjava.net/coderdream/archive/2006/10/13/75077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]正则表达式之道</title><link>http://www.blogjava.net/coderdream/archive/2006/10/13/75076.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 13 Oct 2006 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/10/13/75076.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/75076.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/10/13/75076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/75076.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/75076.html</trackback:ping><description><![CDATA[
		<center>
				<h1>正则表达式之道</h1>
		</center>
		<center>
				<p>原著：Steve Mansour <br />sman@scruznet.com <br /><font size="-1">Revised: June 5, 1999<br />(copied by jm /at/ jmason.org from http://www.scruz.net/%7esman/regexp.htm, after the original disappeared! ) </font></p>
				<p>翻译：Neo Lee<br />neo.lee@gmail.com<br /><font size="-1">2004年10月16日</font></p>
		</center>
		<hr />
		<p>
				<a href="http://sitescooper.org/tao_regexps.html">英文版原文</a>
		</p>
		<p>译者按：原文因为年代久远，文中很多链接早已过期（主要是关于vi、sed等工具的介绍和手册），本译文中已将此类链接删除，如需检查这些链接可以查看上面链接的原文。除此之外基本照原文直译，括号中有“译者按”的部分是译者补充的说明。如有内容方面的问题请直接和Steve Mansor联系，当然，如果你只写中文，也可以和我联系。</p>
		<hr />
		<h1>目 录</h1>
		<p>
				<b>
						<a href="#WhatAreRegularExpressions">什么是正则表达式</a>
				</b>
				<br />
				<b>
						<a href="#SimpleCommands">范例</a>
				</b>
				<br />   <a href="#SimpleCommands">简单</a><br />   <a href="#MediumDifficultyExamples">中级（神奇的咒语）</a><br />   <a href="#HardExamples">困难（不可思议的象形文字）</a><br /><b><a href="#Regular_Expressions_In_Various_Tools">不同工具中的正则表达式</a></b></p>
		<p>
		</p>
		<hr width="100%" />
		<h1>
				<a name="WhatAreRegularExpressions">
				</a>什么是正则表达式</h1>一个正则表达式，就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸，这篇文章也不能够改变这一点，不过，经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的，而且，一旦你弄懂它们，你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟（甚至几秒钟）内完成。正则表达式被各种文本编辑软件、类库（例如Rogue Wave的tools.h++）、脚本工具（像awk/grep/sed）广泛的支持，而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。 
<p>我们将在如下的章节中利用一些例子来解释正则表达式的用法，绝大部分的例子是基于<b><tt>vi</tt></b>中的文本替换命令和<b><tt>grep</tt></b>文件搜索命令来书写的，不过它们都是比较典型的例子，其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看<a href="#Regular_Expressions_In_Various_Tools">不同工具中的正则表达式</a>这一节，其中有一些在别的工具中使用正则表达式的例子。还有一个关于vi中文本替换命令（s）的<a href="#ViSubstitutionCommandSyntax">简单说明</a>附在文后供参考。</p><h2>正则表达式基础</h2>正则表达式由一些普通字符和一些<i>元字符（metacharacters）</i>组成。普通字符包括大小写的字母和数字，而元字符则具有特殊的含义，我们下面会给予解释。 
<p>在最简单的情况下，一个正则表达式看上去就是一个普通的查找串。例如，正则表达式"testing"中没有包含任何元字符，，它可以匹配"testing"和"123testing"等字符串，但是不能匹配"Testing"。</p><p>要想真正的用好正则表达式，正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 
</p><p></p><table cellspacing="2" cellpadding="2"><tbody><tr valign="baseline"><th align="left"><b><i>元字符</i></b></th><td> </td><th align="left"><b><i>描述</i></b></th></tr><tr><td><hr width="100%" /></td><td></td><td><hr width="100%" /></td></tr><tr><td valign="top" align="middle"><center><b><tt><font face="Courier New"><font size="+1">.</font></font></tt></b></center></td><td></td><td>匹配任何单个字符。例如正则表达式<b><tt>r.t</tt></b>匹配这些字符串：<i>rat</i>、<i>rut</i>、<i>r t</i>，但是不匹配<i>root</i>。 </td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">$</font></font></tt></b></center></td><td></td><td>匹配行结束符。例如正则表达式<b><tt>weasel$</tt></b> 能够匹配字符串"<i>He's a weasel</i>"的末尾，但是不能匹配字符串"<i>They are a bunch of weasels.</i>"。 </td></tr><tr><td valign="top"><center><b><font size="+1">^</font></b></center></td><td></td><td>匹配一行的开始。例如正则表达式<b><tt>^When in</tt></b>能够匹配字符串"<i>When in the course of human events</i>"的开始，但是不能匹配"<i>What and When in the"。</i></td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">*</font></font></tt></b></center></td><td></td><td>匹配0或多个正好在它之前的那个字符。例如正则表达式<b><tt></tt></b><b><tt>.*</tt></b>意味着能够匹配任意数量的任何字符。</td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">\</font></font></tt></b></center></td><td></td><td>这是引用府，用来将这里列出的这些元字符当作普通的字符来进行匹配。例如正则表达式<b><tt>\$</tt></b>被用来匹配美元符号，而不是行尾，类似的，正则表达式<tt><strong>\.</strong></tt>用来匹配点字符，而不是任何字符的通配符。</td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">[ ] </font></font></tt></b><br /><b><tt><font face="Courier New"><font size="+1">[c</font><font size="-1">1</font><font size="+1">-c</font><font size="-1">2</font><font size="+1">]</font></font></tt></b><br /><b><tt><font face="Courier New"><font size="+1">[^c</font><font size="-1">1</font><font size="+1">-c</font><font size="-1">2</font><font size="+1">]</font></font></tt></b></center></td><td></td><td>匹配括号中的任何一个字符。例如正则表达式<b><tt>r[aou]t</tt></b>匹配<i>rat</i>、<i>rot</i>和<i>rut</i>，但是不匹配<i>ret</i>。可以在括号中使用连字符-来指定字符的区间，例如正则表达式<b><tt>[0-9]</tt></b>可以匹配任何数字字符；还可以制定多个区间，例如正则表达式<b><tt>[A-Za-z]</tt></b>可以匹配任何大小写字母。另一个重要的用法是“排除”，要想匹配<i>除了</i>指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符，例如正则表达式<b><tt>[^269A-Z]</tt></b> 将匹配除了2、6、9和所有大写字母之外的任何字符。</td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">\&lt; \&gt;</font></font></tt></b></center></td><td></td><td>匹配词（<em>word</em>）的开始（\&lt;）和结束（\&gt;）。例如正则表达式<b><tt><font face="Courier New">\&lt;the</font></tt></b>能够匹配字符串"<i>for the wise</i>"中的"the"，但是不能匹配字符串"<i>otherwise</i>"中的"the"。<strong>注意</strong>：这个元字符不是所有的软件都支持的。</td></tr><tr><td valign="top"><center><b><tt><font face="Courier New"><font size="+1">\( \)</font></font></tt></b></center></td><td></td><td>将 \( 和 \) 之间的表达式定义为“组”（<em>group</em>），并且将匹配这个表达式的字符保存到一个临时区域（一个正则表达式中最多可以保存9个），它们可以用 <b><tt>\1</tt></b> 到<b><tt>\9</tt></b> 的符号来引用。</td></tr><tr><td valign="baseline"><center><b><tt><font face="Courier New"><font size="+1">|</font></font></tt></b></center></td><td></td><td>将两个匹配条件进行逻辑“或”（<em>Or</em>）运算。例如正则表达式<b><tt><font face="Courier New">(him|her)</font></tt></b> 匹配"<i>it belongs to him</i>"和"<i>it belongs to her</i>"，但是不能匹配"<i>it belongs to them.</i>"。<strong>注意</strong>：这个元字符不是所有的软件都支持的。</td></tr><tr valign="baseline"><td><center><b><tt><font face="Courier New"><font size="+1">+</font></font></tt></b></center></td><td></td><td>匹配1或多个正好在它之前的那个字符。例如正则表达式<b><tt></tt></b><b><tt></tt></b><b><tt>9+</tt></b>匹配9、99、999等。<strong>注意</strong>：这个元字符不是所有的软件都支持的。</td></tr><tr valign="baseline"><td><center><b><tt><font size="+1">?</font></tt></b></center></td><td></td><td>匹配0或1个正好在它之前的那个字符。<strong>注意</strong>：这个元字符不是所有的软件都支持的。</td></tr><tr valign="baseline"><td><center><b><font size="+1"><tt><font face="Courier New">\{</font></tt><i>i</i><tt><font face="Courier New">\}</font></tt></font></b><br /><b><font size="+1"><tt><font face="Courier New">\{</font></tt><i>i</i><tt><font face="Courier New">,</font></tt><i>j</i><tt><font face="Courier New">\}</font></tt></font></b></center></td><td></td><td valign="baseline">匹配指定数目的字符，这些字符是在它之前的表达式定义的。例如正则表达式<b><tt><font face="Courier New">A[0-9]\{3\}</font></tt></b> 能够匹配字符"A"后面跟着正好3个数字字符的串，例如A123、A348等，但是不匹配A1234。而正则表达式<b><tt><font face="Courier New">[0-9]\{4,6\}</font></tt></b> 匹配连续的任意4个、5个或者6个数字字符。<strong>注意</strong>：这个元字符不是所有的软件都支持的。</td></tr></tbody></table><p></p><hr width="100%" /><p>最简单的元字符是点，它能够匹配任何单个字符（注意<strong>不</strong>包括新行符）。假定有个文件test.txt包含以下几行内容：</p><ul><tt>he is a rat</tt><br /><tt>he is in a rut</tt><br /><tt>the food is Rotten</tt><br /><tt>I like root beer</tt></ul>我们可以使用grep命令来测试我们的正则表达式，grep命令使用正则表达式去尝试匹配指定文件的每一行，并将至少有一处匹配表达式的所有行显示出来。命令 
<ul><tt>grep r.t test.txt</tt></ul>在test.txt文件中的每一行中搜索正则表达式<b><tt>r.t</tt></b>，并打印输出匹配的行。正则表达式<b><tt>r.t</tt></b>匹配一个<b><tt>r</tt></b>接着任何一个字符再接着一个<b><tt>t</tt></b>。所以它将匹配文件中的<b><tt>rat</tt></b>和<b><tt>rut</tt></b>，而不能匹配<b><tt>Rotten</tt></b>中的<b><tt>Rot</tt></b>，因为正则表达式是大小写敏感的。要想同时匹配大写和小写字母，应该使用字符区间元字符（方括号）。正则表达式<b><tt>[Rr]</tt></b>能够同时匹配<b><tt>R</tt></b>和<b><tt>r</tt></b>。所以，要想匹配一个大写或者小写的<b><tt>r</tt></b>接着任何一个字符再接着一个<b><tt>t</tt></b>就要使用这个表达式：<b><tt>[Rr].t</tt></b>。 
<p>要想匹配行首的字符要使用抑扬字符（<em>^</em>）——又是也被叫做插入符。例如，想找到text.txt中行首"he"打头的行，你可能会先用简单表达式<b><tt>he</tt></b>，但是这会匹配第三行的<b><tt>the</tt></b>，所以要使用正则表达式<b><tt>^he</tt></b>，它只匹配在行首出现的<b><tt>h</tt></b>。 </p><p>有时候指定“除了×××都匹配”会比较容易达到目的，当抑扬字符（<em>^</em>）出现在方括号中是，它表示“排除”，例如要匹配<b><tt>he</tt></b> ，但是排除前面是<b><tt>t</tt></b> or <b><tt>s</tt></b>的情性（也就是<b><tt>the</tt></b>和<b><tt>s</tt></b><b><tt>he</tt></b>），可以使用：<b><tt>[^st]he</tt></b>。 </p><p>可以使用方括号来指定多个字符区间。例如正则表达式<b><tt>[A-Za-z]</tt></b>匹配任何字母，包括大写和小写的；正则表达式<b><tt>[A-Za-z][A-Za-z]*</tt></b> 匹配一个字母后面接着0或者多个字母（大写或者小写）。当然我们也可以用元字符<b><tt>+</tt></b>做到同样的事情，也就是：<b><tt>[A-Za-z]+</tt></b> ，和<b><tt>[A-Za-z][A-Za-z]*</tt></b>完全等价。但是要注意元字符<b><tt>+</tt></b> 并不是所有支持正则表达式的程序都支持的。关于这一点可以参考后面的<a href="#Regular%20Expressions%20Syntax">正则表达式语法支持情况</a>。</p><p>要指定特定数量的匹配，要使用大括号（注意必须使用反斜杠来转义）。想匹配所有<b><tt>100</tt></b>和<b><tt>1000</tt></b>的实例而排除<b><tt>10</tt></b>和<b><tt>10000</tt></b>，可以使用：<b><tt>10\{2,3\}</tt></b>，这个正则表达式匹配数字1后面跟着2或者3个0的模式。在这个元字符的使用中一个有用的变化是忽略第二个数字，例如正则表达式<b><tt>0\{3,\}</tt></b> 将匹配至少3个连续的0。</p><h2><a name="SimpleCommands"></a>简单的例子</h2><p>这里有一些有代表性的、比较简单的例子。 
</p><p></p><table cellspacing="2" cellpadding="2"><tbody><tr><td><b><i>vi 命令</i></b></td><td><b><i>作用</i></b></td></tr><tr><td><hr width="100%" /></td><td><hr width="100%" /></td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/ */ /g</font></font></tt></b></td><td>把一个或者多个空格替换为一个空格。</td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/ *$//</font></font></tt></b></td><td>去掉行尾的所有空格。</td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/^/ /</font></font></tt></b></td><td>在每一行头上加入一个空格。</td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/^[0-9][0-9]* //</font></font></tt></b></td><td>去掉行首的所有数字字符。</td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/b[aeio]g/bug/g</font></font></tt></b></td><td>将所有的<i>bag</i>、<i>beg</i>、<i>big</i>和<i>bog</i>改为<i>bug</i>。 </td></tr><tr><td><b><tt><font face="Courier New"><font size="+1">:%s/t\([aou]\)g/h\1t/g</font></font></tt></b></td><td>将所有<i>tag</i>、<i>tog</i>和<i>tug</i>分别改为<i>hat</i>、<i>hot</i>和<i>hug</i>（注意用group的用法和使用\1引用前面被匹配的字符）。</td></tr><tr><td></td><td></td></tr></tbody></table><h2><a name="MediumDifficultyExamples"></a>中级的例子（神奇的咒语）</h2><h3>例1</h3><p>将所有方法foo(<i>a,b,c</i>)的实例改为foo(<i>b,a,c</i>)。这里a、b和c可以是任何提供给方法foo()的参数。也就是说我们要实现这样的转换： 
</p><p></p><table cellspacing="4" cellpadding="0"><tbody><tr><td><b>之前</b></td><td> </td><td><b>之后</b></td></tr><tr><td><tt>foo(10,7,2)</tt></td><td></td><td><tt>foo(7,10,2)</tt></td></tr><tr><td><tt>foo(x+13,y-2,10)</tt></td><td></td><td><tt>foo(y-2,x+13,10)</tt></td></tr><tr><td><tt>foo( bar(8), x+y+z, 5)</tt></td><td></td><td><tt>foo( x+y+z, bar(8), 5)</tt></td></tr></tbody></table><p>下面这条替换命令能够实现这一魔法：</p><ul><b><tt><font face="Courier New">:%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo(\2,\1,\3)/g</font></tt></b></ul><p>现在让我们把它打散来加以分析。写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。第一个参数是用这个表达式来识别的：：<b><tt><font face="Courier New">\([^,]*\)</font></tt></b>，我们可以从里向外来分析它：  
</p><p></p><table><tbody><tr><td><b><tt><font face="Courier New">[^,]</font></tt></b></td><td> </td><td>除了逗号之外的任何字符</td></tr><tr><td><b><tt><font face="Courier New">[^,]*</font></tt></b></td><td></td><td>0或者多个非逗号字符</td></tr><tr><td><b><tt><font face="Courier New">\([^,]*\)</font></tt></b></td><td></td><td>将这些非逗号字符标记为<b><tt>\1</tt></b>，这样可以在之后的替换模式表达式中引用它</td></tr><tr valign="baseline"><td><b><tt><font face="Courier New">\([^,]*\),</font></tt></b></td><td></td><td>我们必须找到0或者多个非逗号字符后面跟着一个逗号，并且非逗号字符那部分要标记出来以备后用。</td></tr></tbody></table><p>现在正是指出一个使用正则表达式常见错误的最佳时机。为什么我们要使用<b><tt><font face="Courier New">[^,]*</font></tt></b>这样的一个表达式，而不是更加简单直接的写法，例如：<b><tt><font face="Courier New">.*</font></tt></b>，来匹配第一个参数呢？设想我们使用模式<b><tt><font face="Courier New">.*</font></tt></b>来匹配字符串"10,7,2"，它应该匹配"10,"还是"10,7,"？为了解决这个两义性（ambiguity），正则表达式规定一律按照最长的串来，在上面的例子中就是"10,7,"，显然这样就找出了两个参数而不是我们期望的一个。所以，我们要使用<b><tt><font face="Courier New">[^,]*</font></tt></b>来强制取出第一个逗号之前的部分。</p><p>这个表达式我们已经分析到了：<b><tt><font face="Courier New">foo(\([^,]*\)</font></tt></b>，这一段可以简单的翻译为“当你找到<b><tt>foo(</tt></b>就把其后直到第一个逗号之前的部分标记为<b><tt><font face="Courier New">\1</font></tt></b>”。然后我们使用同样的办法标记第二个参数为<b><tt><font face="Courier New">\2</font></tt></b>。对第三个参数的标记方法也是一样，只是我们要搜索所有的字符直到右括号。我们并没有必要去搜索第三个参数，因为我们不需要调整它的位置，但是这样的模式能够保证我们只去替换那些有三个参数的foo()方法调用，在foo()是一个重载（overoading）方法时这种明确的模式往往是比较保险的。然后，在替换部分，我们找到foo()的对应实例，然后利用标记好的部分进行替换，是的第一和第二个参数交换位置。</p><h3>例2</h3>假设有一个CSV（comma separated value）文件，里面有一些我们需要的信息，但是格式却有问题，目前数据的列顺序是：姓名，公司名，州名缩写，邮政编码，现在我们希望讲这些数据重新组织，以便在我们的某个软件中使用，需要的格式为：姓名，州名缩写-邮政编码，公司名。也就是说，我们要调整列顺序，还要合并两个列来构成一个新列。另外，我们的软件不能接受逗号前后面有任何空格（包括空格和制表符）所以我们还必须要去掉逗号前后的所有空格。 
<p>这里有几行我们现在的数据：</p><ul><tt>Bill Jones,     HI-TEK Corporation ,  CA, 95011</tt><br /><tt><font face="Courier New">Sharon Lee Smith,  Design Works Incorporated,  CA, 95012</font></tt><br /><tt><font face="Courier New">B. Amos   ,  Hill Street Cafe,  CA, 95013</font></tt><br /><tt><font face="Courier New">Alexander Weatherworth,  The Crafts Store,  CA, 95014</font></tt><br /><tt><font face="Courier New">...</font></tt></ul>我们希望把它变成这个样子： 
<ul><tt>Bill Jones,CA 95011,HI-TEK Corporation</tt><br /><tt><font face="Courier New">Sharon Lee Smith,CA 95012,Design Works Incorporated</font></tt><br /><tt><font face="Courier New">B. Amos,CA 95013,Hill Street Cafe</font></tt><br /><tt><font face="Courier New">Alexander Weatherworth,CA 95014,The Crafts Store</font></tt><br /><tt><font face="Courier New">...</font></tt></ul>我们将用两个正则表达式来解决这个问题。第一个移动列和合并列，第二个用来去掉空格。 
<p>下面就是第一个替换命令：</p><ul><b><tt><font face="Courier New">:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3 \4,\2/</font></tt></b></ul>这里的方法跟例1基本一样，第一个列（姓名）用这个表达式来匹配：<b><tt><font face="Courier New">\([^,]*\)</font></tt></b>，即第一个逗号之前的所有字符，而姓名内容被用<b><tt><font face="Courier New">\1</font></tt></b>标记下来。公司名和州名缩写字段用同样的方法标记为<b><tt><font face="Courier New">\2</font></tt></b>和<b><tt><font face="Courier New">\3</font></tt></b>，而最后一个字段用<b><tt><font face="Courier New">\(.*\)</font></tt></b>来匹配（"匹配所有字符直到行末"）。替换部分则引用上面标记的那些内容来进行构造。 
<p>下面这个替换命令则用来去除空格：</p><ul><b><tt><font face="Courier New">:%s/[ \t]*,[ \t]*/,/g</font></tt></b></ul>我们还是分解来看：<b><tt><font face="Courier New">[ \t]</font></tt></b>匹配空格/制表符，<b><tt><font face="Courier New">[ \t]*</font></tt></b> 匹配0或多个空格/制表符，<b><tt>[ \t]*</tt></b>,匹配0或多个空格/制表符后面再加一个逗号，最后，<b><tt><font face="Courier New">[ \t]*,[ \t]*</font></tt></b>匹配0或多个空格/制表符接着一个逗号再接着0或多个空格/制表符。在替换部分，我们简单的我们找到的所有东西替换成一个逗号。这里我们使用了结尾的可选的<b><tt>g</tt></b>参数，这表示在每行中对所有匹配的串执行替换（而不是缺省的只替换第一个匹配串）。 
<h3>例3</h3>假设有一个多字符的片断重复出现，例如： 
<blockquote><tt>Billy tried really hard</tt><br /><tt>Sally tried really really hard</tt><br /><tt>Timmy tried really really really hard</tt><br /><tt>Johnny tried really really really really hard</tt></blockquote>而你想把"really"、"really really"，以及任意数量连续出现的"really"字符串换成一个简单的"very"（simple is good!），那么以下命令： 
<blockquote><b><tt>:%s/\(really \)\(really \)*/very /</tt></b></blockquote>就会把上述的文本变成： 
<blockquote><tt>Billy tried very hard</tt><br /><tt>Sally tried very hard</tt><br /><tt>Timmy tried very hard</tt><br /><tt>Johnny tried very hard</tt></blockquote>表达式<b><tt>\(really \)*</tt></b>匹配0或多个连续的"really "（注意结尾有个空格），而<b><tt>\(really \)\(really \)*</tt></b> 匹配1个或多个连续的"really "实例。 
<h2><a name="HardExamples"></a>困难的例子（不可思议的象形文字）</h2><i>Coming soon</i>. 
<p></p><hr /><h1><a name="Regular_Expressions_In_Various_Tools"></a>不同工具中的正则表达式</h1>OK，你已经准备使用RE（regular expressions，正则表达式），但是你并准备使用vi。所以，在这里我们给出一些在其他工具中使用RE的例子。另外，我还会总结一下你在不同程序之间使用RE可能发现的区别。 
<p>当然，你也可以在Visual C++编辑器中使用RE。选择Edit-&gt;Replace，然后选择"Regular expression"选择框，Find What输入框对应上面介绍的vi命令<b><tt>:%s/pat1/pat2/g</tt></b>中的pat1部分，而Replace输入框对应pat2部分。但是，为了得到vi的执行范围和<b><tt>g</tt></b>选项，你要使用Replace All或者适当的手工Find Next and Replace（译者按：知道为啥有人骂微软弱智了吧，虽然VC中可以选中一个范围的文本，然后在其中执行替换，但是总之不够vi那么灵活和典雅）。</p><h2>sed</h2><p>Sed是<b><u>S</u></b>tream <b><u>ED</u></b>itor的缩写，是Unix下常用的基于文件和管道的编辑工具，可以在手册中得到关于sed的详细信息。 </p><p>这里是一些有趣的sed脚本，假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件，sed只是处理源文件的每一行并把结果显示在标准输出中（当然很容易使用重定向来定制）： 
</p><p></p><table><tbody><tr><td><b><i>sed脚本</i></b></td><td> </td><td><b><i>描述</i></b></td></tr><tr><td><hr width="100%" /></td><td></td><td><hr width="100%" /></td></tr><tr valign="baseline"><td><b><tt>sed 's/^$/d' price.txt</tt></b></td><td></td><td>删除所有空行</td></tr><tr><td><b><tt>sed 's/^[ \t]*$/d' price.txt</tt></b></td><td></td><td>删除所有只包含空格或者制表符的行</td></tr><tr><td><b><tt>sed 's/"//g' price.txt</tt></b></td><td></td><td>删除所有引号</td></tr></tbody></table><h2>awk</h2>awk是一种编程语言，可以用来对文本数据进行复杂的分析和处理。可以在手册中得到关于awk的详细信息。这个古怪的名字是它作者们的姓的缩写（Aho，Weinberger和Kernighan）。 
<p>在Aho，Weinberger和Kernighan的书<u>The AWK Programming Language</u>中有很多很好的awk的例子，请不要让下面这些微不足道的脚本例子限制你对awk强大能力的理解。我们同样假定我们针对price.txt文件进行处理，跟sed一样，awk也只是把结果显示在终端上。  
</p><p></p><table><tbody><tr><td><b><i>awk脚本</i></b></td><td> </td><td><b><i>描述</i></b></td></tr><tr><td><hr width="100%" /></td><td></td><td><hr width="100%" /></td></tr><tr valign="baseline"><td><b><tt>awk '$0 !~ /^$/' price.txt</tt></b></td><td></td><td>删除所有空行</td></tr><tr><td><b><tt>awk 'NF &gt; 0' price.txt</tt></b></td><td></td><td>awk中一个更好的删除所有行的办法</td></tr><tr valign="baseline"><td><b><tt>awk '$2 ~ /^[JT]/ {print $3}' price.txt</tt></b></td><td></td><td>打印所有第二个字段是'J'或者'T'打头的行中的第三个字段</td></tr><tr valign="baseline"><td nowrap=""><b><tt>awk '$2 !~ /[Mm]isc/ {print $3 + $4}' price.txt</tt></b></td><td></td><td>针对所有第二个字段不包含'Misc'或者'misc'的行，打印第3和第4列的和（假定为数字）</td></tr><tr valign="baseline"><td><b><tt>awk '$3 !~ /^[0-9]+\.[0-9]*$/ {print $0}' price.txt</tt></b></td><td></td><td>打印所有第三个字段不是数字的行，这里数字是指<tt>d.d</tt>或者<tt>d这样的形式，其中</tt><tt>d</tt>是0到9的任何数字</td></tr><tr valign="baseline"><td><b><tt>awk '$2 ~ /John|Fred/ {print $0}' price.txt</tt></b></td><td></td><td>如果第二个字段包含'John'或者'Fred'则打印整行</td></tr></tbody></table><h2>grep</h2>grep是一个用来在一个或者多个文件或者输入流中使用RE进行查找的程序。它的name编程语言可以用来针对文件和管道进行处理。可以在手册中得到关于grep的完整信息。这个同样古怪的名字来源于vi的一个命令，<b><tt>g/</tt></b><i>re</i><b><tt>/p</tt></b>，意思是<b>g</b>lobal <b>r</b>egular <b>e</b>xpression <b>p</b>rint。 
<p>下面的例子中我们假定在文件phone.txt中包含以下的文本，——其格式是姓加一个逗号，然后是名，然后是一个制表符，然后是电话号码：</p><ul><p><tt>Francis, John           5-3871</tt><br /><tt>Wong, Fred              4-4123</tt><br /><tt>Jones, Thomas           1-4122</tt><br /><tt>Salazar, Richard        5-2522</tt></p></ul><p></p><table><tbody><tr><td><b><i>grep命令</i></b></td><td><b><i> </i></b></td><td><b><i>描述</i></b></td></tr><tr><td><hr width="100%" /></td><td></td><td><hr width="100%" /></td></tr><tr valign="baseline"><td><b><tt>grep '\t5-...1' phone.txt</tt></b></td><td></td><td>把所有电话号码以5开头以1结束的行打印出来，注意制表符是用<b><tt>\t</tt></b>表示的</td></tr><tr valign="baseline"><td nowrap=""><b><tt>grep '^S[^ ]* R' phone.txt</tt></b></td><td></td><td>打印所有姓以S打头和名以R打头的行</td></tr><tr valign="baseline"><td><b><tt>grep '^[JW]' phone.txt</tt></b></td><td></td><td>打印所有姓开头是J或者W的行</td></tr><tr valign="baseline"><td><b><tt>grep ', ....\t' phone.txt</tt></b></td><td></td><td>打印所有姓是4个字符的行，注意制表符是用<b><tt>\t</tt></b>表示的</td></tr><tr valign="baseline"><td><b><tt>grep -v '^[JW]' phone.txt</tt></b></td><td></td><td>打印所有不以J或者W开头的行</td></tr><tr valign="baseline"><td><b><tt>grep '^[M-Z]' phone.txt</tt></b></td><td></td><td>打印所有姓的开头是M到Z之间任一字符的行</td></tr><tr valign="baseline"><td><b><tt>grep '^[M-Z].*[12]' phone.txt</tt></b></td><td></td><td>打印所有姓的开头是M到Z之间任一字符，并且点号号码结尾是1或者2的行</td></tr></tbody></table><h2>egrep</h2>egrep是grep的一个扩展版本，它在它的正则表达式中支持更多的元字符。下面的例子中我们假定在文件phone.txt中包含以下的文本，——其格式是姓加一个逗号，然后是名，然后是一个制表符，然后是电话号码： 
<ul><tt>Francis, John           5-3871</tt><br /><tt>Wong, Fred              4-4123</tt><br /><tt>Jones, Thomas           1-4122</tt><br /><tt>Salazar, Richard        5-2522</tt></ul><p></p><table><tbody><tr><td><b><i>egrep command</i></b></td><td><b><i> </i></b></td><td><b><i>Description</i></b></td></tr><tr><td><hr width="100%" /></td><td></td><td><hr width="100%" /></td></tr><tr valign="baseline"><td><b><tt>egrep '(John|Fred)' phone.txt</tt></b></td><td></td><td>打印所有包含名字<i>John</i>或者<i>Fred</i>的行</td></tr><tr valign="baseline"><td nowrap=""><b><tt>egrep 'John|22$|^W' phone.txt</tt></b></td><td></td><td>打印所有包含<i>John</i> 或者以22结束或者以<i>W</i>的行</td></tr><tr><td><b><tt>egrep 'net(work)?s' report.txt</tt></b></td><td></td><td>从report.txt中找到所有包含<i>networks</i>或者<i>nets</i>的行</td></tr></tbody></table><h2><hr width="100%" /></h2><h1><a name="Regular Expressions Syntax"></a>正则表达式语法支持情况</h1><table cellspacing="0" border="1"><tbody><tr><td><b>命令或环境</b></td><td><b><tt><font face="Courier New">.</font></tt></b></td><td><b><tt><font face="Courier New">[ ]</font></tt></b></td><td><b><tt><font face="Courier New">^</font></tt></b></td><td><b><tt><font face="Courier New">$</font></tt></b></td><td><b><tt><font face="Courier New">\( \)</font></tt></b></td><td><b><tt><font face="Courier New">\{ \}</font></tt></b></td><td><b><tt><font face="Courier New">?</font></tt></b></td><td><b><tt><font face="Courier New">+</font></tt></b></td><td><b><tt><font face="Courier New">|</font></tt></b></td><td><b><tt><font face="Courier New">( )</font></tt></b></td></tr><tr><td>vi</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>Visual C++</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>awk</td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> X </td><td> X </td><td> X </td><td> X </td></tr><tr><td>sed</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>Tcl</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> X </td><td> X </td><td> X </td><td> X </td></tr><tr><td>ex</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>grep</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>egrep</td><td> X </td><td> X</td><td> X </td><td> X </td><td> X </td><td> </td><td> X </td><td> X </td><td> X </td><td> X </td></tr><tr><td>fgrep</td><td> X </td><td> X </td><td> X </td><td> X </td><td> X </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td>perl</td><td> X</td><td> X</td><td> X</td><td> X</td><td> X</td><td> </td><td> X</td><td> X</td><td> X</td><td> X</td></tr></tbody></table><p> </p><hr /><h1><a name="ViSubstitutionCommandSyntax"></a>vi替换命令简介</h1>Vi的替换命令： 
<ul><b><tt>:</tt></b><i>range</i><b><tt>s/</tt></b><i>pat1</i><b><tt>/</tt></b><i>pat2</i><b><tt>/g</tt></b></ul>其中 
<ul><b><tt>:</tt></b> 这是Vi的命令执行界面。 </ul><ul><i>range </i>是命令执行范围的指定，可以使用百分号（%）表示所有行，使用点（.）表示当前行，使用美元符号（$）表示最后一行。你还可以使用行号，例如<b><tt>10,20</tt></b>表示第10到20行，<b><tt>.,$</tt></b>表示当前行到最后一行，<b><tt>.+2,$-5</tt></b>表示当前行后两行直到全文的倒数第五行，等等。 
<p><b><tt>s</tt></b> 表示其后是一个替换命令。</p><p><i>pat1 </i>这是要查找的一个正则表达式，这篇文章中有一大堆例子。</p></ul><ul><i>pat2 </i>这是希望把匹配串变成的模式的正则表达式，这篇文章中有一大堆例子。 
<p><b><tt>g</tt></b> 可选标志，带这个标志表示替换将针对行中每个匹配的串进行，否则则只替换行中第一个匹配串。</p></ul>网上有很多vi的在线手册，你可以访问他们以获得更加完整的信息。 
<p></p><hr width="100%" /><center><p><a href="http://matrix.foresee.cn/blogs/neo/">[回到主页]</a></p></center><img src ="http://www.blogjava.net/coderdream/aggbug/75076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-10-13 23:53 <a href="http://www.blogjava.net/coderdream/archive/2006/10/13/75076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创] JavaScript入门(2)</title><link>http://www.blogjava.net/coderdream/archive/2006/09/17/70121.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Sun, 17 Sep 2006 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/09/17/70121.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/70121.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/09/17/70121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/70121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/70121.html</trackback:ping><description><![CDATA[
		<p align="center">
				<font face="Verdana" color="#ff0000" size="5">
						<strong>
						</strong>
				</font>
		</p>
		<p align="center">
				<font color="#ff0000" size="5">
						<strong>JavaScript 的基本语法</strong>
				</font>
		</p>
		<p>
				<font color="#ff0000" size="4">
						<strong>JavaScript的标识符</strong>
				</font>
				<br />
				<br />标识符是指JavaScript中定义的符号，例如，变量名、函数名、数组名等。<br />标识符可以由字母、数字、下划线(_)和美元($)<br />注意：标识符不能以数字开头<br /><br />JavaScript大小写敏感</p>
		<p>JavaScript程序代码的格式<br />以分号(;)结束</p>
		<p>JavaScript程序的注释<br />① // 单行注释<br />② /*  ....  */ 中可以嵌套"//"，但是/*  */不能相互嵌套</p>
		<p>
				<font color="#ff0000" size="4">
						<strong>基本数据类型与常量</strong>
				</font>
				<br />
				<br />整型常量<br />   a、十六进制：以0x或者0X开头，例如：0x8a、0Xff<br />   b、八进制：以0开头，例如：0123<br />   c、十进制：例如：12345</p>
		<p>实型常量（即浮点型）：12.32、5E7、4e59</p>
		<p>布尔值：true 和 false</p>
		<p>字符串型常量："a book of JavaScript"、"abc"、"a"、""。<br /><br />字符串中的特殊字符，需要以反斜杠(\)后跟一个普通字符来表示，例如：\r、\n,\b,\',\",\\</p>
		<p>null 常量 变量已经有值而且值为空</p>
		<p>undefined 常量：变量不存在或者类型未定义<br /><br /></p>
		<div align="center">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 82.84%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 221px; BACKGROUND-COLOR: #eeeeee">
						<p align="left">
								<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">meta http</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">equiv</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Type</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> content</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TEXT/HTML; Charset=GB2312</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> 未定义类型 </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body bgcolor</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">white</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script language </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> JavaScript</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">            </span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> number;<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">                alert(number </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">        </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></p>
				</div>
		</div>
		<p>         输出结果为：undefined abc<br /><br />                      <img height="119" alt="snap0005.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0005.gif" width="171" border="0" /><br /><br /><br /></p>
		<p>变量</p>
		<p>定义一个变量，系统就会为之分配一块内存，程序可以用变量名来表示这块内存中的数据。</p>
		<p>JavaScript为弱类型，所以不能指定变量类型，系统会自动指定类型</p>
		<p>声明变量要使用Var关键字<br />例如：var name</p>
		<p>声明变量的同时为其赋值<br />例如：var name=222222222;</p>
		<p>对已赋值的变量赋予一个其他类型的数据<br />var name2 = "222";<br />name2 = 333;<br />name2 = name2 + 1; // name2等于334</p>
		<p>变量可以不先声明直接使用<br />例如：x=1234</p>
		<p>运算符</p>
		<p>算术运算符<br />+ 加法运算符或正值运算符 例如，x+5,+6。<br /> ＋ 还能实现多个字符串的相连，而且也能将字符串与其它类型的数据类型相连成一个字符串，条件是该表达式中至少有一个字符串，例如："x"+123的结果为"x123"。<br /> <br />% 求模运算符（算术中的求余）a%b结果中的符号取决于a 的符号。<br /> <br /></p>
		<div align="center">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 81.12%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 145px; BACKGROUND-COLOR: #eeeeee">
						<div align="left">
								<span style="COLOR: #008080">1</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">104</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;    <br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">104</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> z </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">8</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">9</span> <span style="COLOR: #000000">    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">b = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; c = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> c </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; y = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> y </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; z = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> z);</span></div>
				</div>
		</div>
		<p>               运行结果：<br /><br />                       <img height="119" alt="snap0006.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0006.gif" width="206" border="0" /><br /><br /><br /></p>
		<p>赋值运算符：<br />=    将一个值或表达式的结果赋给变量<br />       例如：x=3<br />+=    将变量与所赋的值相加后的结果在赋给变量</p>
		<p>比较运算符<br />==    当左边操作数等于右边操作数相等时返回True</p>
		<p>逻辑运算符<br />&amp;&amp;   逻辑与 两边只能是比较运算的结果（布尔型）<br />||       逻辑或<br />!       逻辑非</p>
		<p>位运算符</p>
		<p>&amp;       只有参加运算的两位都为1，运算的结果才为1，否则就为0。<br />|         只有参加运算的两位都为0，运算的结果才为0，否则就为1。<br />^        只有参加运算的两位不相同，运算的结果才为1，否则就为0。</p>
		<p>&gt;&gt;（右移运算符）： 将左边操作数在内存中的二进制数据右移右边操作数指定的位数，左边移空的部分补1<br />相对于除2<br /><br /></p>
		<div align="center">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 81.32%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 320px; BACKGROUND-COLOR: #eeeeee">
						<div align="left">
								<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">            alert(</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 将8右移1位</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">            <br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">            </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #008000">                         0000 1000(8)<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #008000">              右移1位    0000 0100(4)<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000">            </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">            <br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">            alert(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">            </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #008000">            负数在内存中以补码形式保存<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #008000">            原码：0000 1000<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #008000">            反码：1111 0111<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #008000">            补码：1111 1000 （补码为原码取反加1）<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #008000">            <br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #008000">            右移：1111 1100  (得到补码形式的结果)<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #008000">            反码：0000 0011 <br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #008000">                         0000 0001 (减1，相对于加负1)<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #008000">            原码：0000 0100 (-4)<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #008000">            <br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #008000">            </span><span style="COLOR: #008000">*/</span></div>
				</div>
		</div>
		<p>               运行结果：8右移1位得到4，-8右移1位得到-4<br /><br />                      <img height="119" alt="snap0007.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0007.gif" width="171" border="0" />       <img height="119" alt="snap0008.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0008.gif" width="171" border="0" /><br /></p>
		<p>&lt;&lt; （左移运算符）：右边空位补0<br />相对于乘2</p>
		<p>&gt;&gt;&gt;  将左边操作数在内存中的二进制数据右移右边操作数指定的位数，左边移空的部分补0</p>
		<div align="center">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 74.66%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 192px; BACKGROUND-COLOR: #eeeeee">
						<div align="left">
								<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0x80000000</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">alert(a.toString(</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">));<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0x80000000</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&gt;&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">alert(b.toString(</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">));<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #008000">           8: 1000<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #008000">&gt;&gt;      c: 1100 -40000000  右移1位，左边补1<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #008000">&gt;&gt;&gt;    4: 0100  40000000  右移1位，左边补0<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #008000">    <br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span></div>
				</div>
		</div>
		<br />          输出结果为：-40000000 和 40000000<br /><br />                                <img height="119" alt="snap0010.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0010.gif" width="171" border="0" />         <img height="119" alt="snap0009.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0009.gif" width="171" border="0" /><br /><br />注意：移位操作不能改变操作数的值！<br /><br /><div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 72.84%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 89px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080">1</span> <span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">  b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">            alert(b </span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 结果为：4</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">            alert(b);                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 结果为：8</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">            b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;           </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 将b右移1位后的结果赋给b</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">            alert(b);                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 结果为：4</span></div></div></div><br />          输出结果：先输出4，然后输出8，最后输出4<br /><br />            <img height="119" alt="snap0011.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0011.gif" width="171" border="0" />          <img height="119" alt="snap0012.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0012.gif" width="171" border="0" />         <img height="119" alt="snap0013.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091702/snap0013.gif" width="171" border="0" /><img src ="http://www.blogjava.net/coderdream/aggbug/70121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-09-17 13:01 <a href="http://www.blogjava.net/coderdream/archive/2006/09/17/70121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JavaScript 入门(1)</title><link>http://www.blogjava.net/coderdream/archive/2006/09/17/70101.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Sat, 16 Sep 2006 16:25:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2006/09/17/70101.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/70101.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2006/09/17/70101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/70101.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/70101.html</trackback:ping><description><![CDATA[        现在，JavaScript技术已经应用非常广泛，所以学好JavaScript肯定对自己的工作和学习都有好处。以前零零散散学过一些，并不系统，所以从今天开始，通过视频教学加参考资料，好好学一下这个东西。<br /><br />      <font color="#ff0000" size="5"><strong>JavaScript脚本代码的位置<br /></strong></font><br />      可以在三个地方编写JavaScript脚本代码：<br />      ① 在网页文件的&lt;script&gt;&lt;/script&gt;标签对中直接编写<br />      ② 将代码放置在一个单独的文件中(*.js)，在网页文件中引用这个文件<br />      ③ 将代码作为某个元素的事件属性值或者超链接的href属性值。<br /><br />      (1) <strong><font color="#a52a2a" size="4"><font color="#ff0000">在网页文件的&lt;script&gt;&lt;/script&gt;标签对中直接编写<br /></font><br /></font></strong>            JavaScript代码可以放在&lt;head&gt;&lt;/head&gt;标签对或者&lt;body&gt;&lt;/body&gt;标签对中。<br />            a：放在&lt;head&gt;&lt;/head&gt;标签对中<br />             
<div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 88.8%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 176px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">JS代码的位置</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    alert(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date());<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">abc<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div></div></div><br />          <font color="#ff0000">  执行结果为：先弹出对话框，后显示 "abc"</font><br /><p align="center"><img height="552" alt="snap0001.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091701/snap0001.gif" width="777" border="0" /></p><p align="left"><br />            b：放在&lt;body&gt;&lt;/body&gt;标签对中</p><div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 83.35%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 176px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">JS代码的位置</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">abc<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    alert(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date());<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div></div></div><p align="left">       <font color="#ff0000">     执行结果为：先显示 "abc"，后弹出对话框</font></p><p align="center"><img height="552" alt="snap0002.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091701/snap0002.gif" width="772" border="0" /></p><br />      (2)  <font color="#ff0000" size="4"><strong>将代码放置在一个单独的文件中(*.js)，在网页文件中引用这个文件<br /></strong></font><br />            script.js文件代码：<br />             
<div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 75.87%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 25px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #000000">alert(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date());</span></div></div></div><br />         主页面alert.htm文件代码：<br />                   
<div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 83.65%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 161px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">内嵌JS文件</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script src</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body bgcolor</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">white</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div></div></div><br />               <font color="#ff0000">运行结果：打开页面，弹出对话窗口。<br /></font><br />      (3)  <strong><font color="#ff0000" size="4">将代码作为某个元素的事件属性值或者超链接的href属性值。</font></strong><br /><br />           a ： 将代码作为某个元素的事件属性值：<br /><br /><div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 79.71%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 131px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080">1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> 将JS代码作为A标签的属性</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body bgcolor</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">white</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">input type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">button</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> onclick</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">alert(new Date())</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">8</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div></div></div><br />               <font color="#ff0000">运行结果：单击test 按钮，弹出对话框<br /></font><br /><p align="center"><img height="552" alt="snap0004.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091701/snap0004.gif" width="773" border="0" /></p><br />      b ： 将代码作为超链接的href属性值：<br /><br /><div align="center"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 79%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 131px; BACKGROUND-COLOR: #eeeeee"><div align="left"><span style="COLOR: #008080">1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> 将JS代码作为A标签的属性</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">body bgcolor</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">white</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a href</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript:alert(new Date());</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">body</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">8</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div></div></div><br />              <font color="#ff0000"> 运行结果：点击JavaScript链接，弹出对话框<br /></font><br /><p align="center"><img height="552" alt="snap0003.gif" src="http://www.blogjava.net/images/blogjava_net/coderdream/JavaScript/06091701/snap0003.gif" width="773" border="0" /></p><img src ="http://www.blogjava.net/coderdream/aggbug/70101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2006-09-17 00:25 <a href="http://www.blogjava.net/coderdream/archive/2006/09/17/70101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>