﻿<?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-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;明月松间照 清泉石上流-随笔分类-J2SE</title><link>http://www.blogjava.net/xuechen0721/category/12472.html</link><description>&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;———&amp;nbsp;兵临城下&amp;nbsp;&amp;nbsp ？？</description><language>zh-cn</language><lastBuildDate>Sat, 10 May 2008 11:29:54 GMT</lastBuildDate><pubDate>Sat, 10 May 2008 11:29:54 GMT</pubDate><ttl>60</ttl><item><title>oracle命令：exp、imp</title><link>http://www.blogjava.net/xuechen0721/archive/2008/05/09/199517.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Fri, 09 May 2008 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2008/05/09/199517.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/199517.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2008/05/09/199517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/199517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/199517.html</trackback:ping><description><![CDATA[今天使用orcle的备份和恢复命令：<br />
<br />
备份数据<br />
1、获取帮助：<br />
&nbsp;&nbsp;&nbsp;&nbsp;exp help=y<br />
2. 导出一个完整数据库<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#47;&#112;&#119;&#100;&#64;&#105;&#110;&#115;&#116;&#97;&#110;&#99;&#101;">user/pwd@instance</a> file=path full=y<br />
&nbsp;&nbsp;&nbsp;&nbsp;示例：exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#115;&#121;&#115;&#116;&#101;&#109;&#64;&#120;&#99;">system/system@xc</a> file = c:/hehe fill =y<br />
3 、导出一个或一组指定用户所属的全部表、索引和其他对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;exp system/manager file=seapark log=seapark owner=seapark exp system/manager file=seapark log=seapark owner=(seapark,amy,amyc,harold)<br />
&nbsp;&nbsp;&nbsp;&nbsp;示例：exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#115;&#121;&#115;&#116;&#101;&#109;&#64;&#120;&#99;">system/system@xc</a> file=c:/hehe owner=uep<br />
4、导出一个或多个指定表<br />
&nbsp;&nbsp;&nbsp;&nbsp;exp system/manager file=tank log=tank tables=(seapark.tank,amy.artist)<br />
&nbsp;&nbsp;&nbsp;&nbsp;示例：exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#115;&#121;&#115;&#116;&#101;&#109;&#64;&#120;&#99;">system/system@xc</a> file=c:/heh tables=(ueppm.ne_table)<br />
<br />
<br />
恢复数据<br />
<p class="postText" align="left"><font size="2">1. 获取帮助 </font></p>
<div twffan="done">
<pre><font size="2"> imp help=y</font></pre>
</div>
<p class="postText" align="left"><font size="2">2. 导入一个完整数据库</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=bible_db log=dible_db full=y ignore=y</font></pre>
</div>
<p class="postText" align="left"><font size="2">3. 导入一个或一组指定用户所属的全部表、索引和其他对象</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=seapark log=seapark fromuser=seapark <br />
imp</font><font size="2"> system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)</font></pre>
</div>
<p class="postText" align="left"><font size="2">4. 将一个用户所属的数据导入另一个用户</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy</font></pre>
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=(seapark,amy)</font><font size="2"> touser=(seapark1, amy1)</font></pre>
</div>
<p class="postText" align="left"><font size="2">5. 导入一个表</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)</font></pre>
</div>
<br />
<br />
<img src ="http://www.blogjava.net/xuechen0721/aggbug/199517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2008-05-09 15:26 <a href="http://www.blogjava.net/xuechen0721/archive/2008/05/09/199517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>五一前最后一贴！发现一个问题，搞不明白，上来求助！</title><link>http://www.blogjava.net/xuechen0721/archive/2008/04/30/197534.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Wed, 30 Apr 2008 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2008/04/30/197534.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/197534.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2008/04/30/197534.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/197534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/197534.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; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.xcblcx.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_85_1401_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_1401_Open_Text.style.display='none'; Codehighlighter1_85_1401_Closed_Image.style.display='inline'; Codehighlighter1_85_1401_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_85_1401_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_85_1401_Closed_Text.style.display='none'; Codehighlighter1_85_1401_Open_Image.style.display='inline'; Codehighlighter1_85_1401_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadNotifyTest&nbsp;</span><span id="Codehighlighter1_85_1401_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_85_1401_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ArrayList&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_132_155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_155_Open_Text.style.display='none'; Codehighlighter1_132_155_Closed_Image.style.display='inline'; Codehighlighter1_132_155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_132_155_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_132_155_Closed_Text.style.display='none'; Codehighlighter1_132_155_Open_Image.style.display='inline'; Codehighlighter1_132_155_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_132_155_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_132_155_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_197_466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_466_Open_Text.style.display='none'; Codehighlighter1_197_466_Closed_Image.style.display='inline'; Codehighlighter1_197_466_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_197_466_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_197_466_Closed_Text.style.display='none'; Codehighlighter1_197_466_Open_Image.style.display='inline'; Codehighlighter1_197_466_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_197_466_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_197_466_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadNotifyTest&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadNotifyTest();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Queue&nbsp;queue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;test.</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Queue();<br />
<img id="Codehighlighter1_288_415_Open_Image" onclick="this.style.display='none'; Codehighlighter1_288_415_Open_Text.style.display='none'; Codehighlighter1_288_415_Closed_Image.style.display='inline'; Codehighlighter1_288_415_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_288_415_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_288_415_Closed_Text.style.display='none'; Codehighlighter1_288_415_Open_Image.style.display='inline'; Codehighlighter1_288_415_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span id="Codehighlighter1_288_415_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_288_415_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_337_411_Open_Image" onclick="this.style.display='none'; Codehighlighter1_337_411_Open_Text.style.display='none'; Codehighlighter1_337_411_Closed_Image.style.display='inline'; Codehighlighter1_337_411_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_337_411_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_337_411_Closed_Text.style.display='none'; Codehighlighter1_337_411_Open_Image.style.display='inline'; Codehighlighter1_337_411_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">5</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_337_411_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_337_411_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue.addStr(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(i).toString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_435_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_435_463_Open_Text.style.display='none'; Codehighlighter1_435_463_Closed_Image.style.display='inline'; Codehighlighter1_435_463_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_435_463_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_435_463_Closed_Text.style.display='none'; Codehighlighter1_435_463_Open_Image.style.display='inline'; Codehighlighter1_435_463_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_435_463_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_435_463_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_503_830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_503_830_Open_Text.style.display='none'; Codehighlighter1_503_830_Closed_Image.style.display='inline'; Codehighlighter1_503_830_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_503_830_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_503_830_Closed_Text.style.display='none'; Codehighlighter1_503_830_Open_Image.style.display='inline'; Codehighlighter1_503_830_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Thread&nbsp;</span><span id="Codehighlighter1_503_830_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_503_830_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Queue&nbsp;queue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Queue();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_559_588_Open_Image" onclick="this.style.display='none'; Codehighlighter1_559_588_Open_Text.style.display='none'; Codehighlighter1_559_588_Closed_Image.style.display='inline'; Codehighlighter1_559_588_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_559_588_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_559_588_Closed_Text.style.display='none'; Codehighlighter1_559_588_Open_Image.style.display='inline'; Codehighlighter1_559_588_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ThreadTest()&nbsp;</span><span id="Codehighlighter1_559_588_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_559_588_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this.queue&nbsp;=&nbsp;queue;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_610_827_Open_Image" onclick="this.style.display='none'; Codehighlighter1_610_827_Open_Text.style.display='none'; Codehighlighter1_610_827_Closed_Image.style.display='inline'; Codehighlighter1_610_827_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_610_827_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_610_827_Closed_Text.style.display='none'; Codehighlighter1_610_827_Open_Image.style.display='inline'; Codehighlighter1_610_827_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_610_827_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_610_827_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_627_823_Open_Image" onclick="this.style.display='none'; Codehighlighter1_627_823_Open_Text.style.display='none'; Codehighlighter1_627_823_Closed_Image.style.display='inline'; Codehighlighter1_627_823_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_627_823_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_627_823_Closed_Text.style.display='none'; Codehighlighter1_627_823_Open_Image.style.display='inline'; Codehighlighter1_627_823_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_627_823_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_627_823_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_636_766_Open_Image" onclick="this.style.display='none'; Codehighlighter1_636_766_Open_Text.style.display='none'; Codehighlighter1_636_766_Closed_Image.style.display='inline'; Codehighlighter1_636_766_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_636_766_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_636_766_Closed_Text.style.display='none'; Codehighlighter1_636_766_Open_Image.style.display='inline'; Codehighlighter1_636_766_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span id="Codehighlighter1_636_766_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_636_766_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Thread&nbsp;start&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;testStr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.queue.getNext();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(testStr);<br />
<img id="Codehighlighter1_786_818_Open_Image" onclick="this.style.display='none'; Codehighlighter1_786_818_Open_Text.style.display='none'; Codehighlighter1_786_818_Closed_Image.style.display='inline'; Codehighlighter1_786_818_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_786_818_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_786_818_Closed_Text.style.display='none'; Codehighlighter1_786_818_Open_Image.style.display='inline'; Codehighlighter1_786_818_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;e&nbsp;)</span><span id="Codehighlighter1_786_818_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_786_818_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_847_1398_Open_Image" onclick="this.style.display='none'; Codehighlighter1_847_1398_Open_Text.style.display='none'; Codehighlighter1_847_1398_Closed_Image.style.display='inline'; Codehighlighter1_847_1398_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_847_1398_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_847_1398_Closed_Text.style.display='none'; Codehighlighter1_847_1398_Open_Image.style.display='inline'; Codehighlighter1_847_1398_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Queue&nbsp;</span><span id="Codehighlighter1_847_1398_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_847_1398_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;threadTest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_908_1024_Open_Image" onclick="this.style.display='none'; Codehighlighter1_908_1024_Open_Text.style.display='none'; Codehighlighter1_908_1024_Closed_Image.style.display='inline'; Codehighlighter1_908_1024_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_908_1024_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_908_1024_Closed_Text.style.display='none'; Codehighlighter1_908_1024_Open_Image.style.display='inline'; Codehighlighter1_908_1024_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Queue()</span><span id="Codehighlighter1_908_1024_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_908_1024_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this.threadTest&nbsp;=&nbsp;new&nbsp;ThreadTest(this);</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.threadTest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.threadTest.start();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1062_1133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1062_1133_Open_Text.style.display='none'; Codehighlighter1_1062_1133_Closed_Image.style.display='inline'; Codehighlighter1_1062_1133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1062_1133_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1062_1133_Closed_Text.style.display='none'; Codehighlighter1_1062_1133_Open_Image.style.display='inline'; Codehighlighter1_1062_1133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addStr(String&nbsp;str)&nbsp;</span><span id="Codehighlighter1_1062_1133_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1062_1133_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1086_1129_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1086_1129_Open_Text.style.display='none'; Codehighlighter1_1086_1129_Closed_Image.style.display='inline'; Codehighlighter1_1086_1129_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1086_1129_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1086_1129_Closed_Text.style.display='none'; Codehighlighter1_1086_1129_Open_Image.style.display='inline'; Codehighlighter1_1086_1129_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(list)&nbsp;</span><span id="Codehighlighter1_1086_1129_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1086_1129_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(str);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.notify();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1192_1395_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1192_1395_Open_Text.style.display='none'; Codehighlighter1_1192_1395_Closed_Image.style.display='inline'; Codehighlighter1_1192_1395_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1192_1395_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1192_1395_Closed_Text.style.display='none'; Codehighlighter1_1192_1395_Open_Image.style.display='inline'; Codehighlighter1_1192_1395_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getNext()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;InterruptedException&nbsp;</span><span id="Codehighlighter1_1192_1395_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1192_1395_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1216_1391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1216_1391_Open_Text.style.display='none'; Codehighlighter1_1216_1391_Closed_Image.style.display='inline'; Codehighlighter1_1216_1391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1216_1391_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1216_1391_Closed_Text.style.display='none'; Codehighlighter1_1216_1391_Open_Image.style.display='inline'; Codehighlighter1_1216_1391_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(list)&nbsp;</span><span id="Codehighlighter1_1216_1391_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1216_1391_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1246_1346_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1246_1346_Open_Text.style.display='none'; Codehighlighter1_1246_1346_Closed_Image.style.display='inline'; Codehighlighter1_1246_1346_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1246_1346_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1246_1346_Closed_Text.style.display='none'; Codehighlighter1_1246_1346_Open_Image.style.display='inline'; Codehighlighter1_1246_1346_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(list.size()&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1246_1346_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1246_1346_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">wait&nbsp;start</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.wait();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">wait&nbsp;end</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(String)list.remove(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
运行结果为：<br />
<font style="background-color: #cce8cf">java.lang.StackOverflowError<br />
Exception in thread "main" <br />
请问为什么？<br />
</font>
<img src ="http://www.blogjava.net/xuechen0721/aggbug/197534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2008-04-30 15:24 <a href="http://www.blogjava.net/xuechen0721/archive/2008/04/30/197534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle bug</title><link>http://www.blogjava.net/xuechen0721/archive/2008/04/23/195183.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Wed, 23 Apr 2008 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2008/04/23/195183.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/195183.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2008/04/23/195183.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/195183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/195183.html</trackback:ping><description><![CDATA[orace 在执行sql脚本时，如果脚本路径中包含空格，则sqlplus无法识别。<br />
<br />
就这么个问题，搞了我两天，郁闷！发泄一下，重新开始blog生涯！庆祝
<img src ="http://www.blogjava.net/xuechen0721/aggbug/195183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2008-04-23 17:34 <a href="http://www.blogjava.net/xuechen0721/archive/2008/04/23/195183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个郁闷了我两天的问题</title><link>http://www.blogjava.net/xuechen0721/archive/2007/07/08/128886.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Sun, 08 Jul 2007 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2007/07/08/128886.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/128886.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2007/07/08/128886.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/128886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/128886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前两天被自己郁闷了，我维护系统中的一个模块，由于更新代码，我用Eclipse打了一个jar包，放入我们新制作的版本中，可没想到我那个模块就是跑不起来。问题出现后排查log，可没任何error。最后才发现是我使用的jdk版本太高了，我在eclipse使用的是1.5，而版本中都是使用1.4.2.8，所以导致运行到我那段代码时，就出错。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回头想想真是有点冤，这么个问题，足足浪费了我两天的时间，汗啊！<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检验匮乏啊！
<img src ="http://www.blogjava.net/xuechen0721/aggbug/128886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2007-07-08 16:21 <a href="http://www.blogjava.net/xuechen0721/archive/2007/07/08/128886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java正则表达式入门文档 </title><link>http://www.blogjava.net/xuechen0721/archive/2007/01/01/91320.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Mon, 01 Jan 2007 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2007/01/01/91320.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/91320.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2007/01/01/91320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/91320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/91320.html</trackback:ping><description><![CDATA[
		<div class="postTitle">
				<a href="http://blog.csdn.net/lenhan12345/archive/2006/12/25/1459667.aspx">
						<img height="13" src="http://blog.csdn.net/images/authorship.gif" width="15" border="0" /> java正则表达式入门文档 </a>
		</div>
		<div class="postText">
				<h4>
						<strong>引言</strong>
				</h4>
				<p>    正则表达式（regular expression）描述了一种字符串匹配的模式，可以用来：（1）检查一个串中是否含有符合某个规则的子串，并且可以得到这个子串；（2）根据匹配规则对字符串进行灵活的替换操作。<br /><br />    正则表达式学习起来其实是很简单的，不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂，一方面是因为大多数的文档没有做到由浅入深地讲解，概念上没有注意先后顺序，给读者的理解带来困难；另一方面，各种引擎自带的文档一般都要介绍它特有的功能，然而这部分特有的功能并不是我们首先要理解的。<br /><br />    文章中的每一个举例，都可以点击进入到测试页面进行测试。闲话少说，开始。</p>  
<h4>1. 正则表达式规则</h4><h5><a name="common"></a>1.1 普通字符</h5><p>    字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号，都是"普通字符"。表达式中的普通字符，在匹配一个字符串的时候，匹配与之相同的一个字符。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=c&amp;txt=abcde"><font color="#000080">举例1：表达式 "c"，在匹配字符串 "abcde" 时</font></a>，匹配结果是：成功；匹配到的内容是："c"；匹配到的位置是：开始于2，结束于3。（注：下标从0开始还是从1开始，因当前编程语言的不同而可能不同）<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=bcd&amp;txt=abcde"><font color="#000080">举例2：表达式 "bcd"，在匹配字符串 "abcde" 时</font></a>，匹配结果是：成功；匹配到的内容是："bcd"；匹配到的位置是：开始于1，结束于4。</p><hr color="#fea089" size="1" /><h5><a name="escaped"></a>1.2 简单的转义字符</h5><p>    一些不便书写的字符，采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="70"><p>表达式</p></td><td><p>可匹配</p></td></tr><tr><td><p>\r, \n</p></td><td><p>代表回车和换行符</p></td></tr><tr><td><p>\t</p></td><td><p>制表符</p></td></tr><tr><td><p>\\</p></td><td><p>代表 "\" 本身</p></td></tr></tbody></table><p>    还有其他一些在后边章节中有特殊用处的标点符号，在前面加 "\" 后，就代表该符号本身。比如：^, $ 都有特殊意义，如果要想匹配字符串中 "^" 和 "$" 字符，则表达式就需要写成 "\^" 和 "\$"。</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="66"><p>表达式</p></td><td><p>可匹配</p></td></tr><tr><td><p>\^</p></td><td><p>匹配 ^ 符号本身</p></td></tr><tr><td><p>\$</p></td><td><p>匹配 $ 符号本身</p></td></tr><tr><td><p>\.</p></td><td><p>匹配小数点（.）本身</p></td></tr></tbody></table><p>    这些转义字符的匹配方法与 "普通字符" 是类似的。也是匹配与之相同的一个字符。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%5C$d&amp;txt=abc$de"><font color="#000080">举例1：表达式 "\$d"，在匹配字符串 "abc$de" 时</font></a>，匹配结果是：成功；匹配到的内容是："$d"；匹配到的位置是：开始于3，结束于5。</p><hr color="#fea089" size="1" /><h5><a name="multi"></a>1.3 能够与 '多种字符' 匹配的表达式</h5><p>    正则表达式中的一些表示方法，可以匹配 '多种字符' 其中的任意一个字符。比如，表达式 "\d" 可以匹配任意一个数字。虽然可以匹配其中任意字符，但是只能是一个，不是多个。这就好比玩扑克牌时候，大小王可以代替任意一张牌，但是只能代替一张牌。</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="66"><p>表达式</p></td><td><p>可匹配</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\d</font></font></span></p></td><td><p>任意一个数字，0~9 中的任意一个</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\w</font></font></span></p></td><td><p>任意一个字母或数字或下划线，也就是 A~Z,a~z,0~9,_ 中任意一个</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\s</font></font></span></p></td><td><p>包括空格、制表符、换页符等空白字符的其中任意一个</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">.</font></font></span></p></td><td><p>小数点可以匹配除了换行符（\n）以外的任意一个字符</p></td></tr></tbody></table><p>    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cd%5Cd&amp;txt=abc123"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\d</font><font color="#900050">\d</font></font></span><font color="#000080">"，在匹配 "abc123" 时</font></a>，匹配的结果是：成功；匹配到的内容是："12"；匹配到的位置是：开始于3，结束于5。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=a.%5Cd&amp;txt=aaa100"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">a<font color="#900050">.</font><font color="#900050">\d</font></font></span><font color="#000080">"，在匹配 "aaa100" 时</font></a>，匹配的结果是：成功；匹配到的内容是："aa1"；匹配到的位置是：开始于1，结束于4。</p><hr color="#fea089" size="1" /><h5><a name="custom"></a>1.4 自定义能够匹配 '多种字符' 的表达式</h5><p>    使用方括号 [ ] 包含一系列字符，能够匹配其中任意一个字符。用 [^ ] 包含一系列字符，则能够匹配其中字符之外的任意一个字符。同样的道理，虽然可以匹配其中任意一个，但是只能是一个，不是多个。</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="80"><p>表达式</p></td><td><p>可匹配</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[ab5@]</font></font></span></p></td><td><p>匹配 "a" 或 "b" 或 "5" 或 "@"</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[^abc]</font></font></span></p></td><td><p>匹配 "a","b","c" 之外的任意一个字符</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[f-k]</font></font></span></p></td><td><p>匹配 "f"~"k" 之间的任意一个字母</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[^A-F0-3]</font></font></span></p></td><td><p>匹配 "A"~"F","0"~"3" 之外的任意一个字符</p></td></tr></tbody></table><p>    <a href="http://www.regexlab.com/zh/workshop.asp?pat=[bcd][bcd]&amp;txt=abc123"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[bcd]</font><font color="#900050">[bcd]</font></font></span><font color="#000080">" 匹配 "abc123" 时</font></a>，匹配的结果是：成功；匹配到的内容是："bc"；匹配到的位置是：开始于1，结束于3。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%5B%5Eabc%5D&amp;txt=abc123"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">[^abc]</font></font></span><font color="#000080">" 匹配 "abc123" 时</font></a>，匹配的结果是：成功；匹配到的内容是："1"；匹配到的位置是：开始于3，结束于4。</p><hr color="#fea089" size="1" /><h5><a name="times"></a>1.5 修饰匹配次数的特殊符号</h5><p>    前面章节中讲到的表达式，无论是只能匹配一种字符的表达式，还是可以匹配多种字符其中任意一个的表达式，都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号，那么不用重复书写表达式就可以重复匹配。<br /><br />    使用方法是："次数修饰"放在"被修饰的表达式"后边。比如："[bcd][bcd]" 可以写成 "[bcd]{2}"。</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="67"><p>表达式</p></td><td><p>作用</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">{n}</font></font></span></p></td><td><p>表达式重复n次，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=\w{2}&amp;txt=ab+c6"><font color="#000080">"\w{2}" 相当于 "\w\w"</font></a>；<a href="http://www.regexlab.com/zh/workshop.asp?pat=a{5}&amp;txt=bbaaaaaddee"><font color="#000080">"a{5}" 相当于 "aaaaa"</font></a></p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">{m,n}</font></font></span></p></td><td><p>表达式至少重复m次，最多重复n次，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=ba{1,3}&amp;txt=a,baaa,baa,b,ba"><font color="#000080">"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"</font></a></p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">{m,}</font></font></span></p></td><td><p>表达式至少重复m次，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=\w\d{2,}&amp;txt=b1,a12,_456,_4AA,M12344,12346546547446534543543"><font color="#000080">"\w\d{2,}"可以匹配 "a12","_456","M12344"...</font></a></p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">?</font></font></span></p></td><td><p>匹配表达式0次或者1次，相当于 {0,1}，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=a[cd]%3F&amp;txt=a,c,d,ac,ad"><font color="#000080">"a[cd]?"可以匹配 "a","ac","ad"</font></a></p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">+</font></font></span></p></td><td><p>表达式至少出现1次，相当于 {1,}，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=a%2Bb&amp;txt=a%2Cb%2Cab%2Caab%2Caaab"><font color="#000080">"a+b"可以匹配 "ab","aab","aaab"...</font></a></p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#e07000">*</font></font></span></p></td><td><p>表达式不出现或出现任意次，相当于 {0,}，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5C%5E*b&amp;txt=%5E%2Cb%2C%5E%5E%5Eb%2C%5E%5E%5E%5E%5E%5E%5Eb"><font color="#000080">"\^*b"可以匹配 "b","^^^b"...</font></a></p></td></tr></tbody></table><p>    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cd%2B%5C.%3F%5Cd*&amp;txt=It%20costs%20%2412.5"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\d</font><font color="#e07000">+</font>\.<font color="#e07000">?</font><font color="#900050">\d</font><font color="#e07000">*</font></font></span><font color="#000080">" 在匹配 "It costs $12.5" 时</font></a>，匹配的结果是：成功；匹配到的内容是："12.5"；匹配到的位置是：开始于10，结束于14。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=go{2,8}gle&amp;txt=Ads%20by%20goooooogle%2C%20or%20gooogle"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">go<font color="#e07000">{2,8}</font>gle</font></span><font color="#000080">" 在匹配 "Ads by goooooogle" 时</font></a>，匹配的结果是：成功；匹配到的内容是："goooooogle"；匹配到的位置是：开始于7，结束于17。</p><hr color="#fea089" size="1" /><h5><a name="special"></a>1.6 其他一些代表抽象意义的特殊符号</h5><p>    一些符号在表达式中代表抽象的特殊意义：</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="67"><p>表达式</p></td><td><p>作用</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">^</font></font></span></p></td><td><p>与字符串开始的地方匹配，不匹配任何字符</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">$</font></font></span></p></td><td><p>与字符串结束的地方匹配，不匹配任何字符</p></td></tr><tr><td><p><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">\b</font></font></span></p></td><td><p>匹配一个单词边界，也就是单词和空格之间的位置，不匹配任何字符</p></td></tr></tbody></table><p>    进一步的文字说明仍然比较抽象，因此，举例帮助大家理解。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=^aaa&amp;txt=xxx+aaa+xxx"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">^</font>aaa</font></span><font color="#000080">" 在匹配 "xxx aaa xxx" 时</font></a>，匹配结果是：失败。因为 "^" 要求与字符串开始的地方匹配，因此，只有当 "aaa" 位于字符串的开头的时候，"^aaa" 才能匹配，<a href="http://www.regexlab.com/zh/workshop.asp?pat=^aaa&amp;txt=aaa+xxx+xxx"><font color="#000080">比如："aaa xxx xxx"</font></a>。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=aaa$&amp;txt=xxx+aaa+xxx"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">aaa<font color="#ff00ff">$</font></font></span><font color="#000080">" 在匹配 "xxx aaa xxx" 时</font></a>，匹配结果是：失败。因为 "$" 要求与字符串结束的地方匹配，因此，只有当 "aaa" 位于字符串的结尾的时候，"aaa$" 才能匹配，<a href="http://www.regexlab.com/zh/workshop.asp?pat=aaa$&amp;txt=xxx+xxx+aaa"><font color="#000080">比如："xxx xxx aaa"</font></a>。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=.%5Cb.&amp;txt=@@@abc"><font color="#000080">举例3：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">.</font><font color="#ff00ff">\b</font><font color="#900050">.</font></font></span><font color="#000080">" 在匹配 "@@@abc" 时</font></a>，匹配结果是：成功；匹配到的内容是："@a"；匹配到的位置是：开始于2，结束于4。<br />    进一步说明："\b" 与 "^" 和 "$" 类似，本身不匹配任何字符，但是它要求它在匹配结果中所处位置的左右两边，其中一边是 "\w" 范围，另一边是 非"\w" 的范围。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cbend%5Cb&amp;txt=weekend,endfor,end"><font color="#000080">举例4：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">\b</font>end<font color="#ff00ff">\b</font></font></span><font color="#000080">" 在匹配 "weekend,endfor,end" 时</font></a>，匹配结果是：成功；匹配到的内容是："end"；匹配到的位置是：开始于15，结束于18。</p><p>    一些符号可以影响表达式内部的子表达式之间的关系：</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="65"><p>表达式</p></td><td><p>作用</p></td></tr><tr><td><p>|</p></td><td><p>左右两边表达式之间 "或" 关系，匹配左边或者右边</p></td></tr><tr><td><p>( )</p></td><td><p>(1). 在被修饰匹配次数的时候，括号中的表达式可以作为整体被修饰<br />(2). 取匹配结果的时候，括号中的表达式匹配到的内容可以被单独得到</p></td></tr></tbody></table><p>    <a href="http://www.regexlab.com/zh/workshop.asp?pat=Tom%7CJack&amp;txt=I%27m+Tom%2C+he+is+Jack"><font color="#000080">举例5：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">Tom<font color="#5050ff">|</font>Jack</font></span><font color="#000080">" 在匹配字符串 "I'm Tom, he is Jack" 时</font></a>，匹配结果是：成功；匹配到的内容是："Tom"；匹配到的位置是：开始于4，结束于7。匹配下一个时，匹配结果是：成功；匹配到的内容是："Jack"；匹配到的位置时：开始于15，结束于19。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28go%5Cs*%29%2B&amp;txt=Let%27s%20go%20go%20go%21"><font color="#000080">举例6：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>go<font color="#900050">\s</font><font color="#e07000">*</font><font color="#5050ff">)</font><font color="#e07000">+</font></font></span><font color="#000080">" 在匹配 "Let's go go go!" 时</font></a>，匹配结果是：成功；匹配到内容是："go go go"；匹配到的位置是：开始于6，结束于14。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%uFFE5%28%5Cd%2B%5C.%3F%5Cd*%29&amp;txt=%uFF0410.9%2C%uFFE520.5"><font color="#000080">举例7：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">￥<font color="#5050ff">(</font><font color="#900050">\d</font><font color="#e07000">+</font>\.<font color="#e07000">?</font><font color="#900050">\d</font><font color="#e07000">*</font><font color="#5050ff">)</font></font></span><font color="#000080">" 在匹配 "＄10.9,￥20.5" 时</font></a>，匹配的结果是：成功；匹配到的内容是："￥20.5"；匹配到的位置是：开始于6，结束于10。单独获取括号范围匹配到的内容是："20.5"。</p><hr color="#fea089" size="1" /><h4>2. 正则表达式中的一些高级规则</h4><h5><a name="reluctant"></a>2.1 匹配次数中的贪婪与非贪婪</h5><p>    在使用修饰匹配次数的特殊符号时，有几种表示方法可以使同一个表达式能够匹配不同的次数，比如："{m,n}", "{m,}", "?", "*", "+"，具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中，总是尽可能多的匹配。比如，针对文本 "dxxxdxxxd"，举例如下：</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="93"><p>表达式</p></td><td><p>匹配结果</p></td></tr><tr><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=(d)(%5Cw%2B)&amp;txt=dxxxdxxxd"><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>d<font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#5050ff">)</font></font></span></a></p></td><td><p>"\w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd"</p></td></tr><tr><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=(d)(%5Cw%2B)(d)&amp;txt=dxxxdxxxd"><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>d<font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#5050ff">)</font><font color="#5050ff">(</font>d<font color="#5050ff">)</font></font></span></a></p></td><td><p>"\w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "\w+" 也能够匹配上最后一个 "d"，但是为了使整个表达式匹配成功，"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d"</p></td></tr></tbody></table><p>    由此可见，"\w+" 在匹配的时候，总是尽可能多的匹配符合它规则的字符。虽然第二个举例中，它没有匹配最后一个 "d"，但那也是为了让整个表达式能够匹配成功。同理，带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配，带 "?" 的表达式在可匹配可不匹配的时候，也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式 。</p><p>    非贪婪模式：<br /><br />    在修饰匹配次数的特殊符号后再加上一个 "?" 号，则可以使匹配次数不定的表达式尽可能少的匹配，使可匹配可不匹配的表达式，尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式，也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候，与贪婪模式类似，非贪婪模式会最小限度的再匹配一些，以使整个表达式匹配成功。举例如下，针对文本 "dxxxdxxxd" 举例：</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="93"><p>表达式</p></td><td><p>匹配结果</p></td></tr><tr><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=(d)(%5Cw%2B%3F)&amp;txt=dxxxdxxxd"><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>d<font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#e07000">?</font><font color="#5050ff">)</font></font></span></a></p></td><td><p>"\w+?" 将尽可能少的匹配第一个 "d" 之后的字符，结果是："\w+?" 只匹配了一个 "x"</p></td></tr><tr><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=(d)(%5Cw%2B%3F)(d)&amp;txt=dxxxdxxxd"><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>d<font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#e07000">?</font><font color="#5050ff">)</font><font color="#5050ff">(</font>d<font color="#5050ff">)</font></font></span></a></p></td><td><p>为了让整个表达式匹配成功，"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配，从而使整个表达式匹配成功。因此，结果是："\w+?" 匹配 "xxx"</p></td></tr></tbody></table><p>    更多的情况，举例如下：<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%3Ctd%3E%28%2E%2A%29%3C%2Ftd%3E&amp;txt=%3Ctd%3E%3Cp%3Eaa%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%3E%3Cp%3Ebb%3C%2Fp%3E%3C%2Ftd%3E"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">&lt;td&gt;<font color="#5050ff">(</font><font color="#900050">.</font><font color="#e07000">*</font><font color="#5050ff">)</font>&lt;/td&gt;</font></span><font color="#000080">" 与字符串 "&lt;td&gt;&lt;p&gt;aa&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;p&gt;bb&lt;/p&gt;&lt;/td&gt;" 匹配时</font></a>，匹配的结果是：成功；匹配到的内容是 "&lt;td&gt;&lt;p&gt;aa&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;p&gt;bb&lt;/p&gt;&lt;/td&gt;" 整个字符串， 表达式中的 "&lt;/td&gt;" 将与字符串中最后一个 "&lt;/td&gt;" 匹配。 <br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%3Ctd%3E%28%2E%2A%3F%29%3C%2Ftd%3E&amp;txt=%3Ctd%3E%3Cp%3Eaa%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%3E%3Cp%3Ebb%3C%2Fp%3E%3C%2Ftd%3E"><font color="#000080">举例2：相比之下，表达式 "</font><span id="pattern" name="pattern"><font color="#000000">&lt;td&gt;<font color="#5050ff">(</font><font color="#900050">.</font><font color="#e07000">*</font><font color="#e07000">?</font><font color="#5050ff">)</font>&lt;/td&gt;</font></span><font color="#000080">" 匹配举例1中同样的字符串时</font></a>，将只得到 "&lt;td&gt;&lt;p&gt;aa&lt;/p&gt;&lt;/td&gt;"， 再次匹配下一个时，可以得到第二个 "&lt;td&gt;&lt;p&gt;bb&lt;/p&gt;&lt;/td&gt;"。</p><hr color="#fea089" size="1" /><h5><a name="backref"></a>2.2 反向引用 \1, \2...</h5><p>    表达式在匹配时，表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候，小括号包含的表达式所匹配到的字符串可以单独获取。这一点，在前面的举例中，已经多次展示了。在实际应用场合中，当用某种边界来查找，而所要获取的内容又不包含边界时，必须使用小括号来指定所要的范围。比如前面的 "<span id="pattern" name="pattern"><font color="#000000">&lt;td&gt;<font color="#5050ff">(</font><font color="#900050">.</font><font color="#e07000">*</font><font color="#e07000">?</font><font color="#5050ff">)</font>&lt;/td&gt;</font></span>"。<br /><br />    其实，"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用，在匹配过程中也可以使用。表达式后边的部分，可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串，"\2" 引用第2对括号内匹配到的字符串……以此类推，如果一对括号内包含另一对括号，则外层的括号先排序号。换句话说，哪一对的左括号 "(" 在前，那这一对就先排序号。</p><p>    举例如下：<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28%27%7C%22%29%28%2E%2A%3F%29%28%5C1%29&amp;txt=%27Hello%27%2C+%22World%22"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font>'<font color="#5050ff">|</font>"<font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#900050">.</font><font color="#e07000">*</font><font color="#e07000">?</font><font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#ff00ff">\1</font><font color="#5050ff">)</font></font></span><font color="#000080">" 在匹配 " 'Hello', "World" " 时</font></a>，匹配结果是：成功；匹配到的内容是：" 'Hello' "。再次匹配下一个时，可以匹配到 " "World" "。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28%5Cw%29%5C1%7B4%2C%7D&amp;txt=aa%20bbbb%20abcdefg%20ccccc%20111121111%20999999999"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#5050ff">)</font><font color="#ff00ff">\1</font><font color="#e07000">{4,}</font></font></span><font color="#000080">" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时</font></a>，匹配结果是：成功；匹配到的内容是 "ccccc"。再次匹配下一个时，将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次，<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cw%7B5%2C%7D&amp;txt=aa%20bbbb%20abcdefg%20ccccc%20111121111%20999999999"><font color="#000080">注意与 "\w{5,}" 之间的区别</font></a>。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%3C%28%5Cw%2B%29%5Cs%2A%28%5Cw%2B%28%3D%28%27%7C%22%29%2E%2A%3F%5C4%29%3F%5Cs%2A%29%2A%3E%2E%2A%3F%3C%2F%5C1%3E&amp;txt=%3Ctd+id%3D%27td1%27+style%3D%22bgcolor%3Awhite%22%3E%3C%2Ftd%3E%0D%0A%3Cbody+onload%3D%22doit%28%29%22%3E%3C%2Fbody%3E"><font color="#000080">举例3：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">&lt;<font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#5050ff">)</font><font color="#900050">\s</font><font color="#e07000">*</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#e07000">+</font><font color="#5050ff">(</font>=<font color="#5050ff">(</font>'<font color="#5050ff">|</font>"<font color="#5050ff">)</font><font color="#900050">.</font><font color="#e07000">*</font><font color="#e07000">?</font><font color="#ff00ff">\4</font><font color="#5050ff">)</font><font color="#e07000">?</font><font color="#900050">\s</font><font color="#e07000">*</font><font color="#5050ff">)</font><font color="#e07000">*</font>&gt;<font color="#900050">.</font><font color="#e07000">*</font><font color="#e07000">?</font>&lt;/<font color="#ff00ff">\1</font>&gt;</font></span><font color="#000080">" 在匹配 "&lt;td id='td1' style="bgcolor:white"&gt;&lt;/td&gt;" 时</font></a>，匹配结果是成功。如果 "&lt;td&gt;" 与 "&lt;/td&gt;" 不配对，则会匹配失败；如果改成其他配对，也可以匹配成功。</p><hr color="#fea089" size="1" /><h5><a name="forward"></a>2.3 预搜索，不匹配；反向预搜索，不匹配</h5><p>    前面的章节中，我讲到了几个代表抽象意义的特殊符号："^"，"$"，"\b"。它们都有一个共同点，那就是：它们本身不匹配任何字符，只是对 "字符串的两头" 或者 "字符之间的缝隙" 附加了一个条件。理解到这个概念以后，本节将继续介绍另外一种对 "两头" 或者 "缝隙" 附加条件的，更加灵活的表示方法。</p><p>    正向预搜索："(?=xxxxx)"，"(?!xxxxx)"<br /><br />    格式："(?=xxxxx)"，在被匹配的字符串中，它对所处的 "缝隙" 或者 "两头" 附加的条件是：所在缝隙的右侧，必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件，所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 "\b"，本身不匹配任何字符。"\b" 只是将所在缝隙之前、之后的字符取来进行了一下判断，不会影响后边的表达式来真正的匹配。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=Windows+%28%3F%3DNT%7CXP%29&amp;txt=Windows+98%2C+Windows+NT%2C+Windows+2000"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">Windows <font color="#999999">(?=</font>NT<font color="#5050ff">|</font>XP<font color="#999999">)</font></font></span><font color="#000080">" 在匹配 "Windows 98, Windows NT, Windows 2000" 时</font></a>，将只匹配 "Windows NT" 中的 "Windows "，其他的 "Windows " 字样则不被匹配。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28%5Cw%29%28%28%3F%3D%5C1%5C1%5C1%29%28%5C1%29%29%2B&amp;txt=aaa+ffffff+999999999"><font color="#000080">举例2：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#5050ff">)</font><font color="#5050ff">(</font><font color="#999999">(?=</font><font color="#ff00ff">\1</font><font color="#ff00ff">\1</font><font color="#ff00ff">\1</font><font color="#999999">)</font><font color="#5050ff">(</font><font color="#ff00ff">\1</font><font color="#5050ff">)</font><font color="#5050ff">)</font><font color="#e07000">+</font></font></span><font color="#000080">" 在匹配字符串 "aaa ffffff 999999999" 时</font></a>，将可以匹配6个"f"的前4个，可以匹配9个"9"的前7个。这个表达式可以读解成：重复4次以上的字母数字，则匹配其剩下最后2位之前的部分。当然，这个表达式可以不这样写，在此的目的是作为演示之用。</p><p>    格式："(?!xxxxx)"，所在缝隙的右侧，必须不能匹配 xxxxx 这部分表达式。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28%28%3F%21%5Cbstop%5Cb%29%2E%29%2B&amp;txt=fdjka+ljfdl+stop+fjdsla+fdj"><font color="#000080">举例3：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#5050ff">(</font><font color="#999999">(?!</font><font color="#ff00ff">\b</font>stop<font color="#ff00ff">\b</font><font color="#999999">)</font><font color="#900050">.</font><font color="#5050ff">)</font><font color="#e07000">+</font></font></span><font color="#000080">" 在匹配 "fdjka ljfdl stop fjdsla fdj" 时</font></a>，将从头一直匹配到 "stop" 之前的位置，如果字符串中没有 "stop"，则匹配整个字符串。<br /><br />    <a href="http://www.regexlab.com/zh/workshop.asp?pat=do%28%3F%21%5Cw%29&amp;txt=done%2C+do%2C+dog"><font color="#000080">举例4：表达式 "</font><span id="pattern" name="pattern"><font color="#000000">do<font color="#999999">(?!</font><font color="#900050">\w</font><font color="#999999">)</font></font></span><font color="#000080">" 在匹配字符串 "done, do, dog" 时</font></a>，只能匹配 "do"。在本条举例中，"do" 后边使用 "(?!\w)" 和使用 "\b" 效果是一样的。</p><p>    反向预搜索："(?&lt;=xxxxx)"，"(?&lt;!xxxxx)"<br /><br />    这两种格式的概念和正向预搜索是类似的，反向预搜索要求的条件是：所在缝隙的 "左侧"，两种格式分别要求必须能够匹配和必须不能够匹配指定表达式，而不是去判断右侧。与 "正向预搜索" 一样的是：它们都是对所在缝隙的一种附加条件，本身都不匹配任何字符。<br /><br />    举例5：表达式 "<span id="pattern" name="pattern"><font color="#000000"><font color="#999999">(?&lt;=</font><font color="#900050">\d</font><font color="#e07000">{4}</font><font color="#999999">)</font><font color="#900050">\d</font><font color="#e07000">+</font><font color="#999999">(?=</font><font color="#900050">\d</font><font color="#e07000">{4}</font><font color="#999999">)</font></font></span>" 在匹配 "1234567890123456" 时，将匹配除了前4个数字和后4个数字之外的中间8个数字。由于 JScript.RegExp 不支持反向预搜索，因此，本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索，比如：Java 1.4 以上的 java.util.regex 包，.NET 中System.Text.RegularExpressions 命名空间，以及本站推荐的<a href="http://www.regexlab.com/zh/deelx/"><font color="#000080">最简单易用的 DEELX 正则引擎</font></a>。</p><hr color="#fea089" size="1" /><h4><a name="othercommon"></a>3. 其他通用规则</h4><p>    还有一些在各个正则表达式引擎之间比较通用的规则，在前面的讲解过程中没有提到。</p><p>3.1 表达式中，可以使用 "\xXX" 和 "\uXXXX" 表示一个字符（"X" 表示一个十六进制数）</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="63"><p>形式</p></td><td><p>字符范围</p></td></tr><tr><td><p>\xXX</p></td><td><p>编号在 0 ~ 255 范围的字符，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cx20&amp;txt=It+is%2E"><font color="#000080">空格可以使用 "\x20" 表示</font></a></p></td></tr><tr><td><p>\uXXXX</p></td><td><p>任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cu4E2D&amp;txt=%D6%D0%B9%FA"><font color="#000080">"\u4E2D"</font></a></p></td></tr></tbody></table><p>3.2 在表达式 "\s"，"\d"，"\w"，"\b" 表示特殊意义的同时，对应的大写字母表示相反的意义</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="55"><p>表达式</p></td><td><p>可匹配</p></td></tr><tr><td><p>\S</p></td><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=%5CS%2B&amp;txt=abc+123+%40%23%24%25"><font color="#000080">匹配所有非空白字符（"\s" 可匹配各个空白字符）</font></a></p></td></tr><tr><td><p>\D</p></td><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=%5CD%2B&amp;txt=abc+123+%40%23%24%25"><font color="#000080">匹配所有的非数字字符</font></a></p></td></tr><tr><td><p>\W</p></td><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=%5CW%2B&amp;txt=abc+123+%40%23%24%25"><font color="#000080">匹配所有的字母、数字、下划线以外的字符</font></a></p></td></tr><tr><td><p>\B</p></td><td><p><a href="http://www.regexlab.com/zh/workshop.asp?pat=%5CB%2E%5CB&amp;txt=abc+123+%40%23%24%25"><font color="#000080">匹配非单词边界，即左右两边都是 "\w" 范围或者左右两边都不是 "\w" 范围时的字符缝隙</font></a></p></td></tr></tbody></table><p>3.3 在表达式中有特殊意义，需要添加 "\" 才能匹配该字符本身的字符汇总</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="55"><p>字符</p></td><td><p>说明</p></td></tr><tr><td><p>^</p></td><td><p>匹配输入字符串的开始位置。要匹配 "^" 字符本身，请使用 "\^"</p></td></tr><tr><td><p>$</p></td><td><p>匹配输入字符串的结尾位置。要匹配 "$" 字符本身，请使用 "\$"</p></td></tr><tr><td><p>( )</p></td><td><p>标记一个子表达式的开始和结束位置。要匹配小括号，请使用 "\(" 和 "\)"</p></td></tr><tr><td><p>[ ]</p></td><td><p>用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号，请使用 "\[" 和 "\]"</p></td></tr><tr><td><p>{ }</p></td><td><p>修饰匹配次数的符号。要匹配大括号，请使用 "\{" 和 "\}"</p></td></tr><tr><td><p>.</p></td><td><p>匹配除了换行符（\n）以外的任意一个字符。要匹配小数点本身，请使用 "\."</p></td></tr><tr><td><p>?</p></td><td><p>修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身，请使用 "\?"</p></td></tr><tr><td><p>+</p></td><td><p>修饰匹配次数为至少 1 次。要匹配 "+" 字符本身，请使用 "\+"</p></td></tr><tr><td><p>*</p></td><td><p>修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身，请使用 "\*"</p></td></tr><tr><td><p>|</p></td><td><p>左右两边表达式之间 "或" 关系。匹配 "|" 本身，请使用 "\|"</p></td></tr></tbody></table><p>3.4 括号 "( )" 内的子表达式，如果希望匹配结果不进行记录供以后使用，可以使用 "(?:xxxxx)" 格式</p><p>    <a href="http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%3A%28%5Cw%29%5C1%29%2B&amp;txt=a bbccdd efg"><font color="#000080">举例1：表达式 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#999999">(?:</font><font color="#5050ff">(</font><font color="#900050">\w</font><font color="#5050ff">)</font><font color="#ff00ff">\1</font><font color="#999999">)</font><font color="#e07000">+</font></font></span><font color="#000080">" 匹配 "a bbccdd efg" 时</font></a>，结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录，因此 "(\w)" 使用 "\1" 来引用。</p><p>3.5 常用的表达式属性设置简介：Ignorecase，Singleline，Multiline，Global</p><table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="3" bgcolor="#f8f8f8" border="1"><tbody><tr bgcolor="#f0f0f0"><td width="80"><p>表达式属性</p></td><td><p>说明</p></td></tr><tr><td><p>Ignorecase</p></td><td><p>默认情况下，表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎，把 "大小写" 概念延伸至 UNICODE 范围的大小写。</p></td></tr><tr><td><p>Singleline</p></td><td><p>默认情况下，小数点 "." 匹配除了换行符（\n）以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。</p></td></tr><tr><td><p>Multiline</p></td><td><p>默认情况下，表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如：<br /><br />①xxxxxxxxx②\n<br />③xxxxxxxxx④<br /><br />配置为 Multiline 可以使 "^" 匹配 ① 外，还可以匹配换行符之后，下一行开始前 ③ 的位置，使 "$" 匹配 ④ 外，还可以匹配换行符之前，一行结束 ② 的位置。</p></td></tr><tr><td><p>Global</p></td><td><p>主要在将表达式用来替换时起作用，配置为 Global 表示替换所有的匹配。</p></td></tr></tbody></table><p> </p><hr color="#fea089" size="1" /><p> </p><h4><a name="prompt"></a>4. 其他提示</h4><p>4.1 如果想要了解高级的正则引擎还支持那些复杂的正则语法，可参见<a href="http://www.regexlab.com/zh/deelx/syntax.htm"><font color="#000080">本站 DEELX 正则引擎的说明文档</font></a>。</p><p>4.2 如果要要求表达式所匹配的内容是整个字符串，而不是从字符串中找一部分，那么可以在表达式的首尾使用 "^" 和 "$"，比如："<span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">^</font><font color="#900050">\d</font><font color="#e07000">+</font><font color="#ff00ff">$</font></font></span>" 要求整个字符串只有数字。</p><p>4.3 如果要求匹配的内容是一个完整的单词，而不会是单词的一部分，那么在表达式首尾使用 "\b"，比如：<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cb%28if%7Cwhile%7Celse%7Cvoid%7Cint%29%5Cb&amp;txt=if%28ifdo%29%0D%0A++++dosome%28%29%3B%0D%0Aelse%0D%0A++++doelse%28%29%3B"><font color="#000080">使用 "</font><span id="pattern" name="pattern"><font color="#000000"><font color="#ff00ff">\b</font><font color="#5050ff">(</font>if<font color="#5050ff">|</font>while<font color="#5050ff">|</font>else<font color="#5050ff">|</font>void<font color="#5050ff">|</font>int……<font color="#5050ff">)</font><font color="#ff00ff">\b</font></font></span><font color="#000080">" 来匹配程序中的关键字</font></a>。</p><p>4.4 表达式不要匹配空字符串。否则会一直得到匹配成功，而结果什么都没有匹配到。比如：准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时，整数、小数点、小数数字都可以省略，但是不要将表达式写成："<span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\d</font><font color="#e07000">*</font>\.<font color="#e07000">?</font><font color="#900050">\d</font><font color="#e07000">*</font></font></span>"，因为如果什么都没有，这个表达式也可以匹配成功。<a href="http://www.regexlab.com/zh/workshop.asp?pat=%5Cd%2B%5C%2E%3F%5Cd%2A%7C%5C%2E%5Cd%2B&amp;txt=123%2C+123%2E%2C+123%2E5%2C+%2E5%2C+%2E"><font color="#000080">更好的写法是："</font><span id="pattern" name="pattern"><font color="#000000"><font color="#900050">\d</font><font color="#e07000">+</font>\.<font color="#e07000">?</font><font color="#900050">\d</font><font color="#e07000">*</font><font color="#5050ff">|</font>\.<font color="#900050">\d</font><font color="#e07000">+</font></font></span><font color="#000080">"</font></a>。</p><p>4.5 能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次，而这个括号整体又可以匹配无限次，那么情况可能比上一条所说的更严重，匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了，比如 .NET 的正则表达式，但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环，也可以从这一点入手，查找一下是否是本条所说的原因。</p><p>4.6 合理选择贪婪模式与非贪婪模式，参见<a href="http://www.regexlab.com/zh/regtopic.htm#reluctant"><font color="#000080">话题讨论</font></a>。</p><p>4.7 或 "|" 的左右两边，对某个字符最好只有一边可以匹配，这样，不会因为 "|" 两边的表达式因为交换位置而有所不同。</p><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1459667</p></div>
<img src ="http://www.blogjava.net/xuechen0721/aggbug/91320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2007-01-01 21:31 <a href="http://www.blogjava.net/xuechen0721/archive/2007/01/01/91320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL 笔记（定时更新）</title><link>http://www.blogjava.net/xuechen0721/archive/2006/12/18/88595.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Mon, 18 Dec 2006 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2006/12/18/88595.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/88595.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2006/12/18/88595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/88595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/88595.html</trackback:ping><description><![CDATA[
		<p>with 语句：<br />WITH T1 AS(SELECT DISTINCT C_UNIT_CODE,C_CNTY_CODE,C_PRODUCT_ID,I_AUTH_LEVEL FROM TRX_USER_AUTH_LEVEL WHERE C_GRP_CODE = 'GRP1206' AND C_USER_ID = 'usr1206'),<br />T2 AS(SELECT DISTINCT B.C_MAIN_REF,B.C_UNIT_CODE,I_AUTH_LEVEL,B.C_CNTY_CODE,B.C_PRODUCT_ID FROM TRX_MATRIX_LIST A JOIN TRX_AUTH_LIST B ON A.C_MAIN_REF = B.C_MAIN_REF AND A.C_UNIT_CODE = B.C_UNIT_CODE AND A.C_CNTY_CODE = B.C_CNTY_CODE AND A.C_PRODUCT_ID = B.C_PRODUCT_ID AND A.I_OP_LEVEL = B.I_AUTH_LEVEL WHERE B.C_MAIN_REF NOT IN (SELECT DISTINCT C_MAIN_REF FROM TRX_AUTH_LIST WHERE C_USER_ID = 'usr1206')),<br />T3 AS(SELECT T2.C_MAIN_REF,T2.C_UNIT_CODE,T2.C_CNTY_CODE,T2.C_PRODUCT_ID FROM T2 JOIN T1 ON T1.C_UNIT_CODE = T2.C_UNIT_CODE AND T1.C_CNTY_CODE = T2.C_CNTY_CODE AND T1.C_PRODUCT_ID = T2.C_PRODUCT_ID AND T1.I_AUTH_LEVEL = T2.I_AUTH_LEVEL),<br />T4 AS(SELECT A. C_UNIT_CODE,A.C_TRX_STATUS,A.C_STATUS_NAME,A.C_PRODUCT_NAME,A.C_MAIN_REF,A.CUST_REF,A.COMP_NAME,A.SCB_REF,A.T_LOCKED_TIME,A.TXN_DATE,A.OTSTND_CCY,A.OTSTND_AMT,A.C_IS_TEMPLATE,A.C_GRP_CODE,A.C_FUNC_ID,A.C_CNTY_CODE,A.C_BK_GROUP_ID,A.C_MODULE,A.BANK_INIT,A.C_PRODUCT_ID,A.C_TRX_REF,A.I_EVENT_TIMES  FROM TRX_INBOX A JOIN T3 ON T3.C_MAIN_REF = A.C_MAIN_REF AND T3.C_UNIT_CODE = A.C_UNIT_CODE AND T3.C_CNTY_CODE = A.C_CNTY_CODE AND T3.C_PRODUCT_ID = A.C_PRODUCT_ID WHERE  (C_TRX_STATUS ='P'OR C_TRX_STATUS='T')AND (BANK_INIT &lt;&gt; 'T'OR BANK_INIT  IS NULL)AND (C_IS_TEMPLATE &lt;&gt; 'Y'OR C_IS_TEMPLATE IS NULL)  AND  C_BK_GROUP_ID  ='SCBBANK'),<br />T5 AS(SELECT DISTINCT A.C_UNIT_CODE,A.C_CNTY_CODE,B.C_PRODUCT_ID FROM TRX_OP_FUNC A JOIN TRX_FAP_RULE B ON A.C_FAP_ID = B.C_FAP_ID WHERE C_GRP_CODE = 'GRP1206' AND C_USER_ID = 'usr1206')<br />SELECT COUNT(*) AS RECCOUNT FROM T4 JOIN T5 ON T4.C_UNIT_CODE = T5.C_UNIT_CODE AND T4.C_CNTY_CODE = T5.C_CNTY_CODE AND T4.C_PRODUCT_ID = T5.C_PRODUCT_ID</p>
		<p>
				<br />UNION语句：<br />SELECT  C_MAIN_REF,I_AUTH_LEVEL,C_TRX_STATUS ,TXN_DATE,TXN_TIME FROM  shgt_auth WHERE C_MAIN_REF='SGGHYLL10030' And C_UNIT_CODE='CINDYGP' <br />AND C_CNTY_CODE='CN' AND C_trx_status = 'A'<br />UNION<br />select  B.C_MAIN_REF,B.I_AUTH_LEVEL,B.C_TRX_STATUS ,B.TXN_DATE,B.TXN_TIME from TRX_AUTH_LIST A,shgt_auth B <br />WHERE B.C_MAIN_REF='SGGHYLL10030' And B.C_UNIT_CODE='CINDYGP' </p>
		<p> </p>
		<p>
				<br />对指定表不写日志：alter table *** activate not logged initially</p>
		<p>创建表：<br />DELETE FROM TABLE EXIMTRX.KEYTEST;<br />DROP TABLE EXIMTRX.KEYTEST;<br />CREATE TABLE EXIMTRX.KEYTEST <br />(<br />    USER_ID    INTEGER,<br />    USER_NAME  VARCHAR(10) NOT NULL,<br />    USER_ADDR  VARCHAR(10) NOT NULL,<br />    USER_MAIL  VARCHAR(10) NOT NULL,<br />    USER_SEC   VARCHAR(10) NOT NULL,<br />    HASH       VARCHAR(10),<br />   PRIMARY KEY (USER_ID,USER_NAME,USER_ADDR,USER_MAIL,USER_SEC)<br />);<br /></p>
		<p>检索数据库表中的不重复记录 (按B列来查询，去除B列中的重复数据）<br />SELECT * FROM TEST WHERE id in (SELECT MIN(id) FROM TEST GROUP BY B)<br />1、查找表中多余的重复记录，重复记录是根据单个字段（peopleId）来判断<br />select * from people<br />where peopleId in (select peopleId from people group by peopleId having count(peopleId) &gt; 1)</p>
		<p>2、删除表中多余的重复记录，重复记录是根据单个字段（peopleId）来判断，只留有rowid最小的记录<br />delete from people <br />where peopleId in (select peopleId from people group by peopleId having count(peopleId) &gt; 1)<br />and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )&gt;1)</p>
		<p>3、查找表中多余的重复记录（多个字段） <br />select * from vitae a<br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) &gt; 1)</p>
		<p>4、删除表中多余的重复记录（多个字段），只留有rowid最小的记录<br />delete from vitae a<br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) &gt; 1)<br />and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)</p>
		<p>5、查找表中多余的重复记录（多个字段），不包含rowid最小的记录<br />select * from vitae a<br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) &gt; 1)<br />and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)&gt;1)</p>
		<p> </p>
		<p> </p>
		<p>复制表<br />create table trx_inbox_back like trx_inbox <br />insert into trx_inbox_back  select * from trx_inbox</p>
		<p>创建视图<br />drop view view_sql<br />create view view_sql as<br />select * from table where ....<br /><br />create view viewTest(id,name,cnty,address) as<br />select a.id,a.col1,a.col2,b.col1 from tablea a ,tableb b where a.id&lt;10000 and a.id=b.id;</p>
		<p>select * from viewTest where id&lt;5000<br /><br /><br /><br />建立索引<br />create index idx_inbox_back on TRX_INBOX_BACK(C_CNTY_CODE,C_UNIT_CODE,C_PRODUCT_ID)</p>
		<p>选取前100条记录<br />select * from trx_inbox FETCH FIRST 100 ROWS ONLY</p>
		<p>join 语句<br />SELECT DISTINCT A.CUST_REF,A.SCB_REF,A.COMP_NAME,A.C_PRODUCT_NAME,A.COUNTER_PARTY_NAME,A.C_STATUS_NAME,A.C_TRX_STATUS,A.C_UNIT_CODE  FROM TRX_INBOX_back A JOIN TRX_OP_FUNC B ON A.C_CNTY_CODE = B.C_CNTY_CODE AND A.C_UNIT_CODE = B.C_UNIT_CODE AND A.C_PRODUCT_ID = B.C_PRODUCT_ID AND B.C_GRP_CODE = 'HKGROUP' AND B.C_USER_ID = 'hkuser' WHERE ( A.C_TRX_STATUS = 'P' OR A.C_TRX_STATUS = 'T') AND (A.BANK_INIT     &lt;&gt; 'T' OR A.BANK_INIT      IS NULL) AND (A.C_IS_TEMPLATE &lt;&gt; 'Y' OR A.C_IS_TEMPLATE  IS NULL) AND  A.C_BK_GROUP_ID  ='SCBBANK'  AND A.C_MAIN_REF LIKE '%xcblcx%' AND A.C_PRODUCT_ID = 'P05102100000'<br /><br /><br /><br />count指定字段 （去除指定字段重复行）注：指定字段中不能包括 INTEGER 类型<br />select count( distinct user_id || user_sec) as counter from test<br /><br /><br /><br />通配符的一些用法：(关键字：<font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">%</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">[]</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">-</span><font color="#0000ff"></font><span style="COLOR: #000000">)<br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[A-M]%</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #000000"><br /><font color="#0000ff"></font>　　这样可以选择出column字段中首字母在A</span><font color="#0000ff"></font><span style="COLOR: #808080">-</span><font color="#0000ff"></font><span style="COLOR: #000000">M之间的记录<br /><br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[ABC]%</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #000000"><br /><font color="#0000ff"></font>　　这样可以选择出column字段中首字母是A或者B或者C的记录<br /><br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[A-CG]%</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #000000"><br /><font color="#0000ff"></font>　　这样可以选择出column字段中首字母在A</span><font color="#0000ff"></font><span style="COLOR: #808080">-</span><font color="#0000ff"></font><span style="COLOR: #000000">C之间的或者是G的记录<br /><br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[^C]%</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #000000"><br /><font color="#0000ff"></font>　　这样可以选择出column字段中首字母不是C的记录<br /><br />脱字符（关键字：</span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> _）<br />　　通过使用下滑线字符（_），可以匹配任意单个字符<br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">M_crosoft</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"> </font><span style="COLOR: #000000"><br /><font color="#0000ff"></font><br />匹配特殊字符：（</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[</span><font color="#0000ff"></font><span style="COLOR: #ff0000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">]</span><font color="#0000ff"></font><span style="COLOR: #000000"> _ </span><font color="#0000ff"></font><span style="COLOR: #808080">-</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">%</span><font color="#0000ff"></font><span style="COLOR: #000000">）<br />　　把他们都放到</span><font color="#0000ff"></font><span style="COLOR: #ff0000">[]</span><font color="#0000ff"></font><span style="COLOR: #000000">中就行了，比如：<br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"></font><span style="COLOR: #808080">like</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">%[%]%</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"> </font><span style="COLOR: #000000"><br /><font color="#0000ff"></font><br />匹配发音（关键字：</span><font color="#0000ff"></font><span style="COLOR: #ff00ff">SOUNDEX</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff00ff">DIFFERENCE</span><font color="#0000ff"></font><span style="COLOR: #000000">）<br />　　如果不知道一个名字确切的发音，但是又多少知道一点，可以考虑使用SOUNDEX DIFFERENCE函数。<br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #808080">*</span><font color="#0000ff"></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">from</span></font><span style="COLOR: #000000"> tablename </span><font color="#0000ff"><span style="COLOR: #0000ff">where</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"></font><span style="COLOR: #ff00ff">DIFFERENCE</span><font color="#0000ff"></font><span style="COLOR: #000000">(column1,</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">Laofei</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #808080">&gt;</span><font color="#0000ff"></font><span style="FONT-WEIGHT: bold; COLOR: #800000">3</span><font color="#0000ff"></font><span style="COLOR: #000000">)<br />　　DIFFERENCE返回0</span><font color="#0000ff"></font><span style="COLOR: #808080">-</span><font color="#0000ff"></font><span style="COLOR: #000000">4之间的数字，4是非常接近，0是差异非常大<br />　　要深入了解DIFFERENCE函数的工作原理，使用SOUNDEX函数返回DIFFERENCE函数所使用的音标码<br />　　</span><font color="#0000ff"><span style="COLOR: #0000ff">select</span></font><span style="COLOR: #000000"> column1 </span><font color="#0000ff"><span style="COLOR: #0000ff">as</span></font><span style="COLOR: #000000"> </span><font color="#0000ff"><span style="COLOR: #0000ff">column</span></font><span style="COLOR: #000000">,</span><font color="#0000ff"></font><span style="COLOR: #ff00ff">SOUNDEX</span><font color="#0000ff"></font><span style="COLOR: #000000">(column1) </span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"></font><span style="COLOR: #ff0000">sound like</span><font color="#0000ff"></font><span style="COLOR: #ff0000">'</span><font color="#0000ff"> </font><span style="COLOR: #000000"><br /><font color="#0000ff"></font><br />　注意：<br />　　DIFFERENCE函数比较两个字符串的第一个字母和所有的辅音字母，该函数忽略任何元音字母（包括Y）,除非元音字母是该字符串的第一个字母。<br />　　使用这两个函数在where中执行效果并不好，所以尽量少使用。</span></p>
<img src ="http://www.blogjava.net/xuechen0721/aggbug/88595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2006-12-18 17:48 <a href="http://www.blogjava.net/xuechen0721/archive/2006/12/18/88595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个xml解析的疑惑</title><link>http://www.blogjava.net/xuechen0721/archive/2006/11/24/83219.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Fri, 24 Nov 2006 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2006/11/24/83219.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/83219.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2006/11/24/83219.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/83219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/83219.html</trackback:ping><description><![CDATA[有这样一段代码：<br />       public static Node findNode(Node node, String name)<br /> {<br />         NodeList list = node.getChildNodes();<br />         int size = list.getLength();<br />         for (int i = 0; i &lt; size; i++)<br />         {<br />             Node node = list.item(i);<br /><font color="#ff1493">             if(node.getNodeType()!=Node.ELEMENT_NODE) <br />                   continue;</font> <br />             if (node.getNodeName().equals(name))<br />                  return node;  <br />        }<br /> }<br /><br />注意其中标红的这句代码，为什么要加这个判断？我在调试过程中发现这段代码确实有用，但为什么有时一样的node结构，为什么有时能检测到非<font color="#000000">ELEMENT_NODE type 的节点，有时却是直接跳过呢？<br />      询问一些同事说，在xml结构中如果存在非法的空格，xml解析器也会把它解析成一个node，但nodetype不是element而已，是这样吗，是不是还有其他的原因？</font><img src ="http://www.blogjava.net/xuechen0721/aggbug/83219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2006-11-24 12:41 <a href="http://www.blogjava.net/xuechen0721/archive/2006/11/24/83219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于文件的读写问题，路过看一下！</title><link>http://www.blogjava.net/xuechen0721/archive/2006/07/16/58405.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Sun, 16 Jul 2006 04:14:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2006/07/16/58405.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/58405.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2006/07/16/58405.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/58405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/58405.html</trackback:ping><description><![CDATA[
		<p>      最近按要求写了一个class，功能很简单，只需在指定的网页代码&lt;html&gt;标签后加入一段taglib（就是一段字符串），我原想很轻松，可遇到一个问题：<br />      在平常的java file 操作时，经常是打开一个file作为in流，read出数据进行各种处理，最后或输出或返回到另外一个文件out流中。可我现在要求实现的是在同一个file中读取并且返回到同一个文件中。在建立in流时，容易：BufferedReader buffReader = new BufferedReader(new FileReader(file));可怎么建立out流呢，总不能都指向同一文件吧？BufferedWriter buffWrite = new BufferedWriter(new FileWriter(file));<br />      后来我用了一个折中的办法，先在同一目录下建立一个临时的文件（例如：temp.jsp),将源文件和需要加入的taglib都写入，然后将源文件删除，再将temp.jsp重命名。虽然功能是实现了，没有任何问题，但总感觉怪怪的。难道java的file操作没有直接打开一个file流，提供编辑功能方法，修改后直接保存。<br />      一点疑问，大家看看，不知道各位遇到这类问题如何解决！希望大家不吝赐教！</p>
<img src ="http://www.blogjava.net/xuechen0721/aggbug/58405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2006-07-16 12:14 <a href="http://www.blogjava.net/xuechen0721/archive/2006/07/16/58405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求sun.net.ftp的ａｐｉ文档</title><link>http://www.blogjava.net/xuechen0721/archive/2006/06/01/49772.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Thu, 01 Jun 2006 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2006/06/01/49772.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/49772.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2006/06/01/49772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/49772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/49772.html</trackback:ping><description><![CDATA[         最近要写一个ftp的读取程序，发现标准java api文档中没有ftp的，现求一个！给网址或邮件都行.(<a href="mailto:xc81_2005@yahoo.com.cn">xc81_2005@yahoo.com.cn</a>) <br />        先谢了！<img src ="http://www.blogjava.net/xuechen0721/aggbug/49772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2006-06-01 19:45 <a href="http://www.blogjava.net/xuechen0721/archive/2006/06/01/49772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个关于Java Socket的问题,大家看一下</title><link>http://www.blogjava.net/xuechen0721/archive/2006/04/29/44040.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Sat, 29 Apr 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/xuechen0721/archive/2006/04/29/44040.html</guid><wfw:comment>http://www.blogjava.net/xuechen0721/comments/44040.html</wfw:comment><comments>http://www.blogjava.net/xuechen0721/archive/2006/04/29/44040.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/xuechen0721/comments/commentRss/44040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuechen0721/services/trackbacks/44040.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#006400">一个关于Java Socket的问题,大家看一下：<br />我的目的是从client端发出一段字符串，server端接收后原样返回给客户端。<br />客户端：ConnClient  服务器端ConnSerer(完整源代码附在最后)</font>
		</p>
		<p>
				<font color="#006400">===client端===<br />建了一个out流和in流：<br />BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));<br />   <br />PrintWriter Clientout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);</font>
		</p>
		<p>
				<font color="#006400">向server端输出：clientOut.println("hello");  clientout.close();<br />等待服务器端返回代码片段：<br />StringBuffer sbuf = new StringBuffer();<br />char[] buff = new char[10];<br />   <br />int iLen = in.read(buff);<br />   <br />while (iLen&gt;0) {  <br />   sbuf.append(buff,0,iLen);<br />   if (sbuf.toString().trim().equals("hello")){<br />       System.out.println(sbuf.toString());<br />        break;<br />   }<br />    iLen = in.read(buff);<br />}</font>
		</p>
		<p>
				<font color="#006400">
				</font> </p>
		<p>
				<br />
				<font color="#006400">===server端===<br />同样建了一个in流和out流<br />BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));<br />  <br />PrintWriter Serverout = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);</font>
		</p>
		<p>
				<font color="#006400">接收client端信息和原样返回信息:<br />StringBuffer sbuf = new StringBuffer();<br />     <br />char[] buff = new char[10];<br />int iLen = in.read(buff);<br />          <br />while(iLen&gt;0){  <br /> sbuf.append(buff,0,iLen);<br /> if (sbuf.toString().trim().equals("hello")){<br /> <br /> System.out.println("Echoing: " + sbuf.toString());<br /> serverout.println(sbuf.toString());       //此处为server端输出流,返回给client端<br /> break;<br />        }</font>
		</p>
		<p>
				<font color="#006400"> iLen = in.read(buff);<br />}</font>
		</p>
		<p>
				<br />
				<font color="#006400">问题来了:<br />1、如果按以上代码运行,server端可以收到client的信息,但client端却收不到返回的信息。为什么？<br />2、后来我把client端的clientout.close()注释掉后，一切正常，client端能收到server端返回的信息。这又为什么？<br />难道server端和client端用的是一个out流？为什么client端把out流关掉后（clientout.close())，server端就不能返回信息呢？</font>
		</p>
		<p>
				<font color="#006400">以我以前的理解，server端和client端建的两个输出流应该是独立的。不会因为我把client端的out流关掉后，server端out流就不能返回了？不会吧！呵呵！</font>
		</p>
		<p>
				<br />
				<font color="#006400">还有一个问题：server端怎么判断client端数据已经发送完毕？<br />一开始，我用clientout.print("hello"),运行后，server端显示已经连接成功但一直侦听，没有收到信息，认为client端还没有发送完成。<br />后来，我改用clientout.println("hello"),运行后，一切正常，服务器端也收到信息（hello）。<br />从上看出server的地判定就是一个回车符，不知道这样认识对不对？大家指点！<br />经过我试验，如果client端print后，用clientout.close()也可以使server端接收到信息。但却不能返回信息。也就是我发现上面说述的问题来由。</font>
		</p>
		<p>
				<font color="#006400">以上几个问题，请大家和banq大哥多加指点！</font>
		</p>
		<p>
				<font color="#006400">源代码如下：<br />client端：<br />package com.socket;</font>
		</p>
		<p>
				<font color="#006400">import java.net.*;<br />import java.io.*;</font>
		</p>
		<p>
				<font color="#006400">public class ConnClient {<br />  public static void main(String[] args) throws IOException {</font>
		</p>
		<p>
				<font color="#006400"> InetAddress addr = InetAddress.getByName(null);<br /> <br /> System.out.println("addr = " + addr);<br /> <br /> Socket socket = new Socket(addr, 8080);<br /> //socket.setSoTimeout(5000);<br /> <br /> try {<br />   System.out.println("socket = " + socket);<br />   BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));<br />   <br />   PrintWriter clientout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);<br />   <br />   String strSend = "hello";<br />   <br />   <br />   clientout.println(strSend);<br />   //clientout.println("\r\n");<br />   //clientout.println();<br />   //clientout.close();<br />   StringBuffer sbuf = new StringBuffer();<br />   <br /> char[] buff = new char[10];<br />   <br /> int iLen = in.read(buff);<br />   <br /> while (iLen&gt;0) {  <br />  sbuf.append(buff,0,iLen);<br />  if (sbuf.toString().trim().equals(strSend)){<br />   System.out.println(sbuf.toString());<br />      break;<br />     }<br />   iLen = in.read(buff);<br /> }<br />  <br /> }catch(Exception e){<br />  e.printStackTrace();<br /> } finally {<br />   System.out.println("closing...");<br />   socket.close();<br /> }<br /> <br />}<br />}</font>
		</p>
		<p>
				<br />
				<font color="#006400">server端代码：<br />package com.socket;<br />import java.io.*;<br />import java.net.*;</font>
		</p>
		<p>
				<font color="#006400">public class ConnServer {  <br />  <br />  public static final int PORT = 8080;<br />  public static void main(String[] args) throws IOException {</font>
		</p>
		<p>
				<font color="#006400"> ServerSocket s = new ServerSocket(PORT);<br /> System.out.println("Started: " + s);<br /> try {<br />   Socket socket = s.accept();<br />   try {<br /> System.out.println("Connection accepted: "+ socket);<br /> BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));</font>
		</p>
		<p>
				<font color="#006400"> PrintWriter serverout = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);<br />  <br />      StringBuffer sbuf = new StringBuffer();<br />        <br /> char[] buff = new char[10];<br /> iLen = in.read(buff);<br />          <br /> while(iLen&gt;0){  <br /> sbuf.append(buff,0,iLen);<br /> if(sbuf.toString().trim().equals("hello")){<br /> <br /> System.out.println("Echoing: " + sbuf.toString());<br /> serverout.println(sbuf.toString());<br />        }<br />           iLen = in.read(buff);<br />}  <br />   }catch(Exception e) { e.printStackTrace();}<br />    finally {<br />   System.out.println("closing...");<br />   <br />   socket.close();<br />   }<br /> <br /> } finally {<br />   s.close();<br /> }<br />  } <br />}<br /></font>
		</p>
<img src ="http://www.blogjava.net/xuechen0721/aggbug/44040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuechen0721/" target="_blank">兵临城下</a> 2006-04-29 17:05 <a href="http://www.blogjava.net/xuechen0721/archive/2006/04/29/44040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>