﻿<?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-The NoteBook of EricKong-随笔分类-正则表达式</title><link>http://www.blogjava.net/jjshcc/category/53128.html</link><description>桑巴葡语翻译工作室是广州市最专业葡萄牙语翻译机构-www.puyufanyi.com-欢迎寻找Java,As400,Mainframe的猎头eric_cc#qq.ccom(把#换成@)</description><language>zh-cn</language><lastBuildDate>Tue, 22 Oct 2013 18:46:25 GMT</lastBuildDate><pubDate>Tue, 22 Oct 2013 18:46:25 GMT</pubDate><ttl>60</ttl><item><title>正则表达式去除注释</title><link>http://www.blogjava.net/jjshcc/archive/2013/10/22/405514.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Tue, 22 Oct 2013 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2013/10/22/405514.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/405514.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2013/10/22/405514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/405514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/405514.html</trackback:ping><description><![CDATA[/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/ (多行注释)<br />//[^\r\n]*+ (单行注释)<br />\&#8221;[^\\\\\"]*(?:\\\\.[^\\\\\"]*)*\&#8221; (双引号字符串)<br />&#8216;[^\\\\']*(?:\\\\.[^\\\\']*)*&#8217; (单引号字符串)<br /><img src ="http://www.blogjava.net/jjshcc/aggbug/405514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2013-10-22 15:55 <a href="http://www.blogjava.net/jjshcc/archive/2013/10/22/405514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>揭开正则表达式的神秘面纱</title><link>http://www.blogjava.net/jjshcc/archive/2012/12/18/393169.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Tue, 18 Dec 2012 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/jjshcc/archive/2012/12/18/393169.html</guid><wfw:comment>http://www.blogjava.net/jjshcc/comments/393169.html</wfw:comment><comments>http://www.blogjava.net/jjshcc/archive/2012/12/18/393169.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jjshcc/comments/commentRss/393169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjshcc/services/trackbacks/393169.html</trackback:ping><description><![CDATA[<div><h4><strong>引言</strong></h4>             <p>&nbsp;&nbsp;&nbsp; 正则表达式（regular              expression）就是用一个&#8220;字符串&#8221;来描述一个特征，然后去验证另一个&#8220;字符串&#8221;是否符合这个特征。比如  表达式&#8220;ab+&#8221; 描述的特征是&#8220;一个 'a' 和 任意个 'b' &#8221;，那么 'ab', 'abb', 'abbbbbbbbbb'  都符合这个特征。</p><br /><p>             &nbsp;&nbsp;&nbsp; 正则表达式可以用来：（1）验证字符串是否符合指定特征，比如验证是否是合法的邮件地址。（2）用来查找字符串，从一个长的文本中查找符合指定特征的字符串，比查找固定字符串更加灵活方便。（3）用来替换，比普通的替换更强大。<br />             <br />             &nbsp;&nbsp;  正则表达式学习起来其实是很简单的，不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂，一方面是因为大多数的文档没有做到由浅 入深地讲解，概念上没有注意先后顺序，给读者的理解带来困难；另一方面，各种引擎自带的文档一般都要介绍它特有的功能，然而这部分特有的功能并不是我们首 先要理解的。<br />             <br />             &nbsp;&nbsp;&nbsp; 文章中的每一个举例，都可以点击进入到测试页面进行测试。闲话少说，开始。</p>             <hr color="#FEA089" size="1" />             <h4>1. 正则表达式规则</h4>             <h5><a name="common"></a>1.1 普通字符</h5>             <p>&nbsp;&nbsp;&nbsp;              字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号，都是"普通字符"。表达式中的普通字符，在匹配一个字符串的时候，匹配与之相同的一个字符。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=c&amp;txt=abcde">举例1：表达式 "c"，在匹配字符串 "abcde"              时</a>，匹配结果是：成功；匹配到的内容是："c"；匹配到的位置是：开始于2，结束于3。（注：下标从0开始还是从1开始，因当前编程语言的不同而可能不同）<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=bcd&amp;txt=abcde">举例2：表达式 "bcd"，在匹配字符串 "abcde" 时</a>，匹配结果是：成功；匹配到的内容是："bcd"；匹配到的位置是：开始于1，结束于4。</p>             <hr color="#FEA089" size="1" />             <h5><a name="escaped"></a>1.2 简单的转义字符</h5>             <p>&nbsp;&nbsp;&nbsp; 一些不便书写的字符，采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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>&nbsp;&nbsp;&nbsp; 还有其他一些在后边章节中有特殊用处的标点符号，在前面加 "\"              后，就代表该符号本身。比如：^, $ 都有特殊意义，如果要想匹配字符串中 "^" 和 "$" 字符，则表达式就需要写成 "\^" 和              "\$"。</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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>&nbsp;&nbsp;&nbsp; 这些转义字符的匹配方法与 "普通字符" 是类似的。也是匹配与之相同的一个字符。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5C$d&amp;txt=abc$de">举例1：表达式 "\$d"，在匹配字符串 "abc$de"              时</a>，匹配结果是：成功；匹配到的内容是："$d"；匹配到的位置是：开始于3，结束于5。</p><hr color="#FEA089" size="1" />             <h5><a name="multi"></a>1.3 能够与 '多种字符' 匹配的表达式</h5>             <p>&nbsp;&nbsp;&nbsp; 正则表达式中的一些表示方法，可以匹配 '多种字符' 其中的任意一个字符。比如，表达式              "\d"              可以匹配任意一个数字。虽然可以匹配其中任意字符，但是只能是一个，不是多个。这就好比玩扑克牌时候，大小王可以代替任意一张牌，但是只能代替一张牌。</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <tbody><tr bgcolor="#F0F0F0">                 <td width="66"><p>表达式</p></td>                 <td><p>可匹配</p></td>               </tr>               <tr>                 <td><p><span id="pattern" name="pattern">\d</span></p></td>                 <td><p>任意一个数字，0~9 中的任意一个</p></td>               </tr>               <tr>                 <td><p><span id="pattern0" name="pattern">\w</span></p></td>                 <td><p>任意一个字母或数字或下划线，也就是 A~Z,a~z,0~9,_ 中任意一个</p></td>               </tr>               <tr>                 <td><p><span id="pattern1" name="pattern">\s</span></p></td>                 <td><p>包括空格、制表符、换页符等空白字符的其中任意一个</p></td>               </tr>               <tr>                 <td><p><span id="pattern2" name="pattern">.</span></p></td>                 <td><p>小数点可以匹配除了换行符（\n）以外的任意一个字符</p></td>               </tr>             </tbody></table>             <p>&nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cd%5Cd&amp;txt=abc123">举例1：表达式 "<span id="pattern3" name="pattern">\d\d</span>"，在匹配              "abc123" 时</a>，匹配的结果是：成功；匹配到的内容是："12"；匹配到的位置是：开始于3，结束于5。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=a.%5Cd&amp;txt=aaa100">举例2：表达式 "<span id="pattern4" name="pattern">a.\d</span>"，在匹配 "aaa100" 时</a>，匹配的结果是：成功；匹配到的内容是："aa1"；匹配到的位置是：开始于1，结束于4。</p>             <hr color="#FEA089" size="1" />             <h5><a name="custom"></a>1.4 自定义能够匹配 '多种字符' 的表达式</h5>             <p>&nbsp;&nbsp;&nbsp; 使用方括号 [ ] 包含一系列字符，能够匹配其中任意一个字符。用 [^ ]              包含一系列字符，则能够匹配其中字符之外的任意一个字符。同样的道理，虽然可以匹配其中任意一个，但是只能是一个，不是多个。</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <tbody><tr bgcolor="#F0F0F0">                 <td width="80"><p>表达式</p></td>                 <td><p>可匹配</p></td>               </tr>               <tr>                 <td><p><span id="pattern5" name="pattern">[ab5@]</span></p></td>                 <td><p>匹配 "a" 或 "b" 或 "5" 或 "@"</p></td>               </tr>               <tr>                 <td><p><span id="pattern6" name="pattern">[^abc]</span></p></td>                 <td><p>匹配 "a","b","c" 之外的任意一个字符</p></td>               </tr>               <tr>                 <td><p><span id="pattern7" name="pattern">[f-k]</span></p></td>                 <td><p>匹配 "f"~"k" 之间的任意一个字母</p></td>               </tr>               <tr>                 <td><p><span id="pattern8" name="pattern">[^A-F0-3]</span></p></td>                 <td><p>匹配 "A"~"F","0"~"3" 之外的任意一个字符</p></td>               </tr>             </tbody></table>             <p>&nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=[bcd][bcd]&amp;txt=abc123">举例1：表达式 "<span id="pattern9" name="pattern">[bcd][bcd]</span>" 匹配              "abc123" 时</a>，匹配的结果是：成功；匹配到的内容是："bc"；匹配到的位置是：开始于1，结束于3。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5B%5Eabc%5D&amp;txt=abc123">举例2：表达式 "<span id="pattern10" name="pattern">[^abc]</span>" 匹配 "abc123" 时</a>，匹配的结果是：成功；匹配到的内容是："1"；匹配到的位置是：开始于3，结束于4。</p>             <hr color="#FEA089" size="1" />             <h5><a name="times"></a>1.5 修饰匹配次数的特殊符号</h5>             <p>&nbsp;&nbsp;&nbsp; 前面章节中讲到的表达式，无论是只能匹配一种字符的表达式，还是可以匹配多种字符其中任意一个的表达式，都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号，那么不用重复书写表达式就可以重复匹配。<br />             <br />             &nbsp;&nbsp;&nbsp; 使用方法是："次数修饰"放在"被修饰的表达式"后边。比如："[bcd][bcd]" 可以写成 "[bcd]{2}"。</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <tbody><tr bgcolor="#F0F0F0">                 <td width="67"><p>表达式</p></td>                 <td><p>作用</p></td>               </tr>               <tr>                 <td><p><span id="pattern11" name="pattern">{n}</span></p></td>                 <td><p>表达式重复n次，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cw%7B2%7D&amp;txt=ab+c6">"\w{2}" 相当于 "\w\w"</a>；<a href="http://www.regexlab.com/zh/workshop.htm?pat=a%7B5%7D&amp;txt=bbaaaaaddee">"a{5}" 相当于 "aaaaa"</a></p></td>               </tr>               <tr>                 <td><p><span id="pattern12" name="pattern">{m,n}</span></p></td>                 <td><p>表达式至少重复m次，最多重复n次，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=ba%7B1,3%7D&amp;txt=a,baaa,baa,b,ba">"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"</a></p></td>               </tr>               <tr>                 <td><p><span id="pattern13" name="pattern">{m,}</span></p></td>                 <td><p>表达式至少重复m次，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cw%5Cd%7B2,%7D&amp;txt=b1,a12,_456,_4AA,M12344,12346546547446534543543">"\w\d{2,}"可以匹配                  "a12","_456","M12344"...</a></p></td>               </tr>               <tr>                 <td><p><span id="pattern14" name="pattern">?</span></p></td>                 <td><p>匹配表达式0次或者1次，相当于 {0,1}，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=a[cd]%3F&amp;txt=a,c,d,ac,ad">"a[cd]?"可以匹配                  "a","ac","ad"</a></p></td>               </tr>               <tr>                 <td><p><span id="pattern15" name="pattern">+</span></p></td>                 <td><p>表达式至少出现1次，相当于 {1,}，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=a%2Bb&amp;txt=a%2Cb%2Cab%2Caab%2Caaab">"a+b"可以匹配                  "ab","aab","aaab"...</a></p></td>               </tr>               <tr>                 <td><p><span id="pattern16" name="pattern">*</span></p></td>                 <td><p>表达式不出现或出现任意次，相当于 {0,}，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5C%5E*b&amp;txt=%5E%2Cb%2C%5E%5E%5Eb%2C%5E%5E%5E%5E%5E%5E%5Eb">"\^*b"可以匹配                  "b","^^^b"...</a></p></td>               </tr>               </tbody></table>             <p>&nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cd%2B%5C.%3F%5Cd*&amp;txt=It%20costs%20%2412.5">举例1：表达式 "<span id="pattern17" name="pattern">\d+\.?\d*</span>" 在匹配              "It costs $12.5" 时</a>，匹配的结果是：成功；匹配到的内容是："12.5"；匹配到的位置是：开始于10，结束于14。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=go%7B2,8%7Dgle&amp;txt=Ads%20by%20goooooogle%2C%20or%20gooogle">举例2：表达式 "<span id="pattern18" name="pattern">go{2,8}gle</span>" 在匹配 "Ads by              goooooogle" 时</a>，匹配的结果是：成功；匹配到的内容是："goooooogle"；匹配到的位置是：开始于7，结束于17。</p>             <hr color="#FEA089" size="1" />             <h5><a name="special"></a>1.6 其他一些代表抽象意义的特殊符号</h5>             <p>&nbsp;&nbsp;&nbsp; 一些符号在表达式中代表抽象的特殊意义：</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <tbody><tr bgcolor="#F0F0F0">                 <td width="67"><p>表达式</p></td>                 <td><p>作用</p></td>               </tr>               <tr>                 <td><p><span id="pattern19" name="pattern">^</span></p></td>                 <td><p>与字符串开始的地方匹配，不匹配任何字符</p></td>               </tr>               <tr>                 <td><p><span id="pattern20" name="pattern">$</span></p></td>                 <td><p>与字符串结束的地方匹配，不匹配任何字符</p></td>               </tr>               <tr>                 <td><p><span id="pattern21" name="pattern">\b</span></p></td>                 <td><p>匹配一个单词边界，也就是单词和空格之间的位置，不匹配任何字符</p></td>               </tr>               </tbody></table>             <p>&nbsp;&nbsp;&nbsp; 进一步的文字说明仍然比较抽象，因此，举例帮助大家理解。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Eaaa&amp;txt=xxx+aaa+xxx">举例1：表达式 "<span id="pattern22" name="pattern">^aaa</span>" 在匹配 "xxx              aaa xxx" 时</a>，匹配结果是：失败。因为 "^" 要求与字符串开始的地方匹配，因此，只有当 "aaa"              位于字符串的开头的时候，"^aaa" 才能匹配，<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Eaaa&amp;txt=aaa+xxx+xxx">比如："aaa xxx xxx"</a>。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=aaa$&amp;txt=xxx+aaa+xxx">举例2：表达式              "<span id="pattern23" name="pattern">aaa$</span>" 在匹配 "xxx              aaa xxx" 时</a>，匹配结果是：失败。因为 "$" 要求与字符串结束的地方匹配，因此，只有当 "aaa"              位于字符串的结尾的时候，"aaa$" 才能匹配，<a href="http://www.regexlab.com/zh/workshop.htm?pat=aaa$&amp;txt=xxx+xxx+aaa">比如："xxx xxx              aaa"</a>。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=.%5Cb.&amp;txt=@@@abc">举例3：表达式 "<span id="pattern24" name="pattern">.\b.</span>" 在匹配 "@@@abc" 时</a>，匹配结果是：成功；匹配到的内容是："@a"；匹配到的位置是：开始于2，结束于4。<br />             &nbsp;&nbsp;&nbsp; 进一步说明："\b"              与 "^" 和 "$" 类似，本身不匹配任何字符，但是它要求它在匹配结果中所处位置的左右两边，其中一边是 "\w" 范围，另一边是              非"\w" 的范围。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cbend%5Cb&amp;txt=weekend,endfor,end">举例4：表达式 "<span id="pattern25" name="pattern">\bend\b</span>" 在匹配 "weekend,endfor,end" 时</a>，匹配结果是：成功；匹配到的内容是："end"；匹配到的位置是：开始于15，结束于18。</p><p>&nbsp;&nbsp;&nbsp; 一些符号可以影响表达式内部的子表达式之间的关系：</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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>&nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=Tom%7CJack&amp;txt=I%27m+Tom%2C+he+is+Jack">举例5：表达式 "<span id="pattern26" name="pattern">Tom|Jack</span>" 在匹配字符串 "I'm Tom, he is Jack" 时</a>，匹配结果是：成功；匹配到的内容是："Tom"；匹配到的位置是：开始于4，结束于7。匹配下一个时，匹配结果是：成功；匹配到的内容是："Jack"；匹配到的位置时：开始于15，结束于19。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28go%5Cs*%29%2B&amp;txt=Let%27s%20go%20go%20go%21">举例6：表达式 "<span id="pattern27" name="pattern">(go\s*)+</span>" 在匹配 "Let's go go go!" 时</a>，匹配结果是：成功；匹配到内容是："go go go"；匹配到的位置是：开始于6，结束于14。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%uFFE5%28%5Cd%2B%5C.%3F%5Cd*%29&amp;txt=%uFF0410.9%2C%uFFE520.5">举例7：表达式 "<span id="pattern28" name="pattern">￥(\d+\.?\d*)</span>" 在匹配 "＄10.9,￥20.5" 时</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>&nbsp;&nbsp;&nbsp; 在使用修饰匹配次数的特殊符号时，有几种表示方法可以使同一个表达式能够匹配不同的次数，比如："{m,n}",  "{m,}", "?", "*",  "+"，具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中，总是尽可能多的匹配。比如，针对文本  "dxxxdxxxd"，举例如下：</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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.htm?pat=%28d%29%28%5Cw%2B%29&amp;txt=dxxxdxxxd"> 				<span id="pattern29" name="pattern">(d)(\w+)</span></a></p></td>                 <td><p>"\w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd"</p></td>               </tr>               <tr>                 <td><p><a href="http://www.regexlab.com/zh/workshop.htm?pat=%28d%29%28%5Cw%2B%29%28d%29&amp;txt=dxxxdxxxd"> 				<span id="pattern30" name="pattern">(d)(\w+)(d)</span></a></p></td>                 <td><p>"\w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "\w+" 也能够匹配上最后一个 "d"，但是为了使整个表达式匹配成功，"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d"</p></td>               </tr>             </tbody></table>             <p>&nbsp;&nbsp;&nbsp; 由此可见，"\w+"  在匹配的时候，总是尽可能多的匹配符合它规则的字符。虽然第二个举例中，它没有匹配最后一个 "d"，但那也是为了让整个表达式能够匹配成功。同理，带  "*" 和 "{m,n}" 的表达式都是尽可能地多匹配，带 "?" 的表达式在可匹配可不匹配的时候，也是尽可能的 "要匹配"。这             种匹配原则就叫作 "贪婪" 模式             。</p>             <p>&nbsp;&nbsp;&nbsp; 非贪婪模式：<br />             <br />             &nbsp;&nbsp;&nbsp; 在修饰匹配次数的特殊符号后再加上一个 "?"  号，则可以使匹配次数不定的表达式尽可能少的匹配，使可匹配可不匹配的表达式，尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式，也叫作  "勉强"  模式。如果少匹配就会导致整个表达式匹配失败的时候，与贪婪模式类似，非贪婪模式会最小限度的再匹配一些，以使整个表达式匹配成功。举例如下，针对文本  "dxxxdxxxd" 举例：</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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.htm?pat=%28d%29%28%5Cw%2B%3F%29&amp;txt=dxxxdxxxd"> 				<span id="pattern31" name="pattern">(d)(\w+?)</span></a></p></td>                 <td><p>"\w+?" 将尽可能少的匹配第一个 "d" 之后的字符，结果是："\w+?" 只匹配了一个 "x"</p></td>               </tr>               <tr>                 <td><p><a href="http://www.regexlab.com/zh/workshop.htm?pat=%28d%29%28%5Cw%2B%3F%29%28d%29&amp;txt=dxxxdxxxd"> 				<span id="pattern32" name="pattern">(d)(\w+?)(d)</span></a></p></td>                 <td><p>为了让整个表达式匹配成功，"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配，从而使整个表达式匹配成功。因此，结果是："\w+?" 匹配 "xxx"</p></td>               </tr>             </tbody></table>             <p>&nbsp;&nbsp;&nbsp; 更多的情况，举例如下：<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?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">举例1：表达式 "<span id="pattern33" name="pattern">&lt;td&gt;(.*)&lt;/td&gt;</span>" 与字符串 "&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;" 匹配时</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 />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?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">举例2：相比之下，表达式 "<span id="pattern34" name="pattern">&lt;td&gt;(.*?)&lt;/td&gt;</span>" 匹配举例1中同样的字符串时</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>&nbsp;&nbsp;&nbsp; 表达式在匹配时，表达式引擎会将小括号 "( )"  包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候，小括号包含的表达式所匹配到的字符串可以单独获取。这一点，在前面的举例中，已经多次展示 了。在实际应用场合中，当用某种边界来查找，而所要获取的内容又不包含边界时，必须使用小括号来指定所要的范围。比如前面的 "<span id="pattern35" name="pattern">&lt;td&gt;(.*?)&lt;/td&gt;</span>"。<br />             <br />             &nbsp;&nbsp;&nbsp; 其实，"小括号包含的表达式所匹配到的字符串"  不仅是在匹配结束后才可以使用，在匹配过程中也可以使用。表达式后边的部分，可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\"  加上一个数字。"\1" 引用第1对括号内匹配到的字符串，"\2"  引用第2对括号内匹配到的字符串&#8230;&#8230;以此类推，如果一对括号内包含另一对括号，则外层的括号先排序号。换句话说，哪一对的左括号 "("  在前，那这一对就先排序号。</p>             <p>&nbsp;&nbsp;&nbsp; 举例如下：<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28%27%7C%22%29%28%2E%2A%3F%29%28%5C1%29&amp;txt=%27Hello%27%2C+%22World%22">举例1：表达式 "<span id="pattern36" name="pattern">('|")(.*?)(\1)</span>" 在匹配 " 'Hello', "World" " 时</a>，匹配结果是：成功；匹配到的内容是：" 'Hello' "。再次匹配下一个时，可以匹配到 " "World" "。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28%5Cw%29%5C1%7B4%2C%7D&amp;txt=aa%20bbbb%20abcdefg%20ccccc%20111121111%20999999999">举例2：表达式 "<span id="pattern37" name="pattern">(\w)\1{4,}</span>" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时</a>，匹配结果是：成功；匹配到的内容是 "ccccc"。再次匹配下一个时，将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次，<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cw%7B5%2C%7D&amp;txt=aa%20bbbb%20abcdefg%20ccccc%20111121111%20999999999">注意与 "\w{5,}" 之间的区别</a>。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?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">举例3：表达式              "<span id="pattern38" name="pattern">&lt;(\w+)\s*(\w+(=('|").*?\4)?\s*)*&gt;.*?&lt;/\1&gt;</span>" 在匹配 "&lt;td id='td1' style="bgcolor:white"&gt;&lt;/td&gt;" 时</a>，匹配结果是成功。如果 "&lt;td&gt;" 与 "&lt;/td&gt;" 不配对，则会匹配失败；如果改成其他配对，也可以匹配成功。</p>             <hr color="#FEA089" size="1" />             <h5><a name="forward"></a>2.3 预搜索，不匹配；反向预搜索，不匹配</h5>             <p>&nbsp;&nbsp;&nbsp;  前面的章节中，我讲到了几个代表抽象意义的特殊符号："^"，"$"，"\b"。它们都有一个共同点，那就是：它们本身不匹配任何字符，只是对  "字符串的两头" 或者 "字符之间的缝隙" 附加了一个条件。理解到这个概念以后，本节将继续介绍另外一种对 "两头" 或者 "缝隙"  附加条件的，更加灵活的表示方法。</p>             <p>&nbsp;&nbsp;&nbsp; 正向预搜索："(?=xxxxx)"，"(?!xxxxx)"<br />             <br />             &nbsp;&nbsp;&nbsp; 格式："(?=xxxxx)"，在被匹配的字符串中，它对所处的 "缝隙" 或者 "两头"  附加的条件是：所在缝隙的右侧，必须能够匹配上 xxxxx  这部分的表达式。因为它只是在此作为这个缝隙上附加的条件，所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似  "\b"，本身不匹配任何字符。"\b" 只是将所在缝隙之前、之后的字符取来进行了一下判断，不会影响后边的表达式来真正的匹配。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=Windows+%28%3F%3DNT%7CXP%29&amp;txt=Windows+98%2C+Windows+NT%2C+Windows+2000">举例1：表达式 "<span id="pattern39" name="pattern">Windows (?=NT|XP)</span>" 在匹配 "Windows 98, Windows NT, Windows 2000" 时</a>，将只匹配 "Windows NT" 中的 "Windows "，其他的 "Windows " 字样则不被匹配。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28%5Cw%29%28%28%3F%3D%5C1%5C1%5C1%29%28%5C1%29%29%2B&amp;txt=aaa+ffffff+999999999">举例2：表达式 "<span id="pattern40" name="pattern">(\w)((?=\1\1\1)(\1))+</span>" 在匹配字符串 "aaa ffffff 999999999" 时</a>，将可以匹配6个"f"的前4个，可以匹配9个"9"的前7个。这个表达式可以读解成：重复4次以上的字母数字，则匹配其剩下最后2位之前的部分。当然，这个表达式可以不这样写，在此的目的是作为演示之用。</p>             <p>&nbsp;&nbsp;&nbsp; 格式："(?!xxxxx)"，所在缝隙的右侧，必须不能匹配 xxxxx 这部分表达式。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28%28%3F%21%5Cbstop%5Cb%29%2E%29%2B&amp;txt=fdjka+ljfdl+stop+fjdsla+fdj">举例3：表达式 "<span id="pattern41" name="pattern">((?!\bstop\b).)+</span>" 在匹配 "fdjka ljfdl stop fjdsla fdj" 时</a>，将从头一直匹配到 "stop" 之前的位置，如果字符串中没有 "stop"，则匹配整个字符串。<br />             <br />             &nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=do%28%3F%21%5Cw%29&amp;txt=done%2C+do%2C+dog">举例4：表达式 "<span id="pattern42" name="pattern">do(?!\w)</span>" 在匹配字符串 "done, do, dog" 时</a>，只能匹配 "do"。在本条举例中，"do" 后边使用 "(?!\w)" 和使用 "\b" 效果是一样的。</p>             <p>&nbsp;&nbsp;&nbsp; 反向预搜索："(?&lt;=xxxxx)"，"(?&lt;!xxxxx)"<br />             <br />             &nbsp;&nbsp;&nbsp; 这两种格式的概念和正向预搜索是类似的，反向预搜索要求的条件是：所在缝隙的  "左侧"，两种格式分别要求必须能够匹配和必须不能够匹配指定表达式，而不是去判断右侧。与 "正向预搜索"  一样的是：它们都是对所在缝隙的一种附加条件，本身都不匹配任何字符。<br />             <br />             &nbsp;&nbsp;&nbsp; 举例5：表达式 "<span id="pattern43" name="pattern">(?&lt;=\d{4})\d+(?=\d{4})</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/">最简单易用的 DEELX 正则引擎</a>。</p><hr color="#FEA089" size="1" />             <h4><a name="othercommon"></a>3. 其他通用规则</h4>             <p>&nbsp;&nbsp;&nbsp; 还有一些在各个正则表达式引擎之间比较通用的规则，在前面的讲解过程中没有提到。</p>             <p>3.1 表达式中，可以使用 "\xXX" 和 "\uXXXX" 表示一个字符（"X" 表示一个十六进制数）</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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.htm?pat=%5Cx20&amp;txt=It+is%2E">空格可以使用 "\x20" 表示</a></p></td>               </tr>               <tr>                 <td><p>\uXXXX</p></td>                 <td><p>任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示，比如：<a href="http://www.regexlab.com/zh/workshop.htm?pat=%5Cu4E2D&amp;txt=%D6%D0%B9%FA">"\u4E2D"</a></p></td>               </tr>             </tbody></table>             <p>3.2 在表达式 "\s"，"\d"，"\w"，"\b" 表示特殊意义的同时，对应的大写字母表示相反的意义</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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.htm?pat=%5CS%2B&amp;txt=abc+123+%40%23%24%25">匹配所有非空白字符（"\s" 可匹配各个空白字符）</a></p></td>               </tr>               <tr>                 <td><p>\D</p></td>                 <td><p><a href="http://www.regexlab.com/zh/workshop.htm?pat=%5CD%2B&amp;txt=abc+123+%40%23%24%25">匹配所有的非数字字符</a></p></td>               </tr>               <tr>                 <td><p>\W</p></td>                 <td><p><a href="http://www.regexlab.com/zh/workshop.htm?pat=%5CW%2B&amp;txt=abc+123+%40%23%24%25">匹配所有的字母、数字、下划线以外的字符</a></p></td>               </tr>               <tr>                 <td><p>\B</p></td>                 <td><p><a href="http://www.regexlab.com/zh/workshop.htm?pat=%5CB%2E%5CB&amp;txt=abc+123+%40%23%24%25">匹配非单词边界，即左右两边都是 "\w" 范围或者左右两边都不是 "\w" 范围时的字符缝隙</a></p></td>               </tr>             </tbody></table>             <p>3.3 在表达式中有特殊意义，需要添加 "\" 才能匹配该字符本身的字符汇总</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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>&nbsp;&nbsp;&nbsp; <a href="http://www.regexlab.com/zh/workshop.htm?pat=%28%3F%3A%28%5Cw%29%5C1%29%2B&amp;txt=a%20bbccdd%20efg">举例1：表达式 "<span id="pattern44" name="pattern">(?:(\w)\1)+</span>" 匹配 "a bbccdd efg" 时</a>，结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录，因此 "(\w)" 使用 "\1" 来引用。</p>             <p>3.5 常用的表达式属性设置简介：Ignorecase，Singleline，Multiline，Global</p>             <table style="border-collapse: collapse" bgcolor="#F8F8F8" border="1" cellpadding="3" cellspacing="0">               <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>默认情况下，表达式 "^" 和 "$" 只匹配字符串的开始 &#9312; 和结尾 &#9315; 位置。如：<br />                 <br />                 &#9312;xxxxxxxxx&#9313;\n<br />                 &#9314;xxxxxxxxx&#9315;<br />                 <br />                 配置为 Multiline 可以使 "^" 匹配 &#9312; 外，还可以匹配换行符之后，下一行开始前 &#9314; 的位置，使 "$" 匹配 &#9315; 外，还可以匹配换行符之前，一行结束 &#9313; 的位置。</p></td>               </tr>               <tr>                 <td><p>Global</p></td>                 <td><p>主要在将表达式用来替换时起作用，配置为 Global 表示替换所有的匹配。</p></td>               </tr>             </tbody></table>             <hr color="#FEA089" size="1" />             <h4><a name="prompt"></a>4. 其他提示</h4>             <p>4.1 如果想要了解高级的正则引擎还支持那些复杂的正则语法，可参见<a href="http://www.regexlab.com/zh/deelx/syntax.htm">本站 DEELX 正则引擎的说明文档</a>。</p>             <p>4.2 如果要要求表达式所匹配的内容是整个字符串，而不是从字符串中找一部分，那么可以在表达式的首尾使用 "^" 和 "$"，比如："<span id="pattern45" name="pattern">^\d+$</span>" 要求整个字符串只有数字。</p>             <p>4.3 如果要求匹配的内容是一个完整的单词，而不会是单词的一部分，那么在表达式首尾使用 "\b"，比如：<a href="http://www.regexlab.com/zh/workshop.htm?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">使用 "<span id="pattern46" name="pattern">\b(if|while|else|void|int&#8230;&#8230;)\b</span>" 来匹配程序中的关键字</a>。</p>             <p>4.4 表达式不要匹配空字符串。否则会一直得到匹配成功，而结果什么都没有匹配到。比如：准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时，整数、小数点、小数数字都可以省略，但是不要将表达式写成："<span id="pattern47" name="pattern">\d*\.?\d*</span>"，因为如果什么都没有，这个表达式也可以匹配成功。<a href="http://www.regexlab.com/zh/workshop.htm?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">更好的写法是："<span id="pattern48" name="pattern">\d+\.?\d*|\.\d+</span>"</a>。</p>             <p>4.5 能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0  次，而这个括号整体又可以匹配无限次，那么情况可能比上一条所说的更严重，匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况 出现死循环了，比如 .NET  的正则表达式，但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环，也可以从这一点入手，查找一下是否是本条所说的原因。</p>             <p>4.6 合理选择贪婪模式与非贪婪模式，参见<a href="http://www.regexlab.com/zh/regtopic.htm#reluctant">话题讨论</a>。</p>             <p>4.7 或 "|" 的左右两边，对某个字符最好只有一边可以匹配，这样，不会因为 "|" 两边的表达式因为交换位置而有</p></div><img src ="http://www.blogjava.net/jjshcc/aggbug/393169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjshcc/" target="_blank">Eric_jiang</a> 2012-12-18 17:54 <a href="http://www.blogjava.net/jjshcc/archive/2012/12/18/393169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>