??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品线路一在线观看,亚洲精品午夜无码电影网,亚洲国产精品无码久久久秋霞2http://m.tkk7.com/wenlong/category/17588.htmlzh-cnWed, 14 May 2008 16:14:00 GMTWed, 14 May 2008 16:14:00 GMT60今天在ITpub上看见的一D|章,自我感觉相当的经典,q去做jsp的时候都没有注意到的问题Q?/title><link>http://m.tkk7.com/wenlong/articles/81657.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Fri, 17 Nov 2006 00:56:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/81657.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/81657.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/81657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/81657.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/81657.html</trackback:ping><description><![CDATA[     摘要: 提升JSP应用E序的七大绝招!  <a href='http://m.tkk7.com/wenlong/articles/81657.html'>阅读全文</a><img src ="http://m.tkk7.com/wenlong/aggbug/81657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-11-17 08:56 <a href="http://m.tkk7.com/wenlong/articles/81657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新遇到的js的经总码!http://m.tkk7.com/wenlong/articles/77197.html文龙文龙Wed, 25 Oct 2006 07:08:00 GMThttp://m.tkk7.com/wenlong/articles/77197.htmlhttp://m.tkk7.com/wenlong/comments/77197.htmlhttp://m.tkk7.com/wenlong/articles/77197.html#Feedback0http://m.tkk7.com/wenlong/comments/commentRss/77197.htmlhttp://m.tkk7.com/wenlong/services/trackbacks/77197.html阅读全文

文龙 2006-10-25 15:08 发表评论
]]>
ASCII?/title><link>http://m.tkk7.com/wenlong/articles/76611.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Sun, 22 Oct 2006 03:32:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/76611.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/76611.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/76611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/76611.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/76611.html</trackback:ping><description><![CDATA[ <div id="zb3d3b3" class="foot"> <h1>ASCII?/h1> </div> <table cellspacing="0" cellpadding="0" width="600" border="1"> <tbody> <tr class="MsoNormalTable"> <td valign="top"> <strong>ASCII?/strong> </td> <td valign="top"> <strong>控制字符</strong> </td> <td valign="top"> <strong>ASCII?/strong> </td> <td valign="top"> <strong>控制字符</strong> </td> <td valign="top"> <strong>ASCII?/strong> </td> <td valign="top"> <strong>控制字符</strong> </td> <td valign="top"> <strong>ASCII?/strong> </td> <td valign="top"> <strong>控制字符</strong> </td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">0</td> <td valign="top">NUT</td> <td valign="top">32</td> <td valign="top">(space)</td> <td valign="top">64</td> <td valign="top">@</td> <td valign="top">96</td> <td valign="top">?/td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">1</td> <td valign="top">SOH</td> <td valign="top">33</td> <td valign="top">Q?/td> <td valign="top">65</td> <td valign="top">A</td> <td valign="top">97</td> <td valign="top">a</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">2</td> <td valign="top">STX</td> <td valign="top">34</td> <td valign="top">?/td> <td valign="top">66</td> <td valign="top">B</td> <td valign="top">98</td> <td valign="top">b</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">3</td> <td valign="top">ETX</td> <td valign="top">35</td> <td valign="top">#</td> <td valign="top">67</td> <td valign="top">C</td> <td valign="top">99</td> <td valign="top">c</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">4</td> <td valign="top">EOT</td> <td valign="top">36</td> <td valign="top">$</td> <td valign="top">68</td> <td valign="top">D</td> <td valign="top">100</td> <td valign="top">d</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">5</td> <td valign="top">ENQ</td> <td valign="top">37</td> <td valign="top">%</td> <td valign="top">69</td> <td valign="top">E</td> <td valign="top">101</td> <td valign="top">e</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">6</td> <td valign="top">ACK</td> <td valign="top">38</td> <td valign="top">&</td> <td valign="top">70</td> <td valign="top">F</td> <td valign="top">102</td> <td valign="top">f</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">7</td> <td valign="top">BEL</td> <td valign="top">39</td> <td valign="top">,</td> <td valign="top">71</td> <td valign="top">G</td> <td valign="top">103</td> <td valign="top">g</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">8</td> <td valign="top">BS</td> <td valign="top">40</td> <td valign="top">(</td> <td valign="top">72</td> <td valign="top">H</td> <td valign="top">104</td> <td valign="top">h</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">9</td> <td valign="top">HT</td> <td valign="top">41</td> <td valign="top">)</td> <td valign="top">73</td> <td valign="top">I</td> <td valign="top">105</td> <td valign="top">i</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">10</td> <td valign="top">LF</td> <td valign="top">42</td> <td valign="top">*</td> <td valign="top">74</td> <td valign="top">J</td> <td valign="top">106</td> <td valign="top">j</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">11</td> <td valign="top">VT</td> <td valign="top">43</td> <td valign="top">+</td> <td valign="top">75</td> <td valign="top">K</td> <td valign="top">107</td> <td valign="top">k</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">12</td> <td valign="top">FF</td> <td valign="top">44</td> <td valign="top">,</td> <td valign="top">76</td> <td valign="top">L</td> <td valign="top">108</td> <td valign="top">l</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">13</td> <td valign="top">CR</td> <td valign="top">45</td> <td valign="top">-</td> <td valign="top">77</td> <td valign="top">M</td> <td valign="top">109</td> <td valign="top">m</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">14</td> <td valign="top">SO</td> <td valign="top">46</td> <td valign="top">.</td> <td valign="top">78</td> <td valign="top">N</td> <td valign="top">110</td> <td valign="top">n</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">15</td> <td valign="top">SI</td> <td valign="top">47</td> <td valign="top">/</td> <td valign="top">79</td> <td valign="top">O</td> <td valign="top">111</td> <td valign="top">o</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">16</td> <td valign="top">DLE</td> <td valign="top">48</td> <td valign="top">0</td> <td valign="top">80</td> <td valign="top">P</td> <td valign="top">112</td> <td valign="top">p</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">17</td> <td valign="top">DCI</td> <td valign="top">49</td> <td valign="top">1</td> <td valign="top">81</td> <td valign="top">Q</td> <td valign="top">113</td> <td valign="top">q</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">18</td> <td valign="top">DC2</td> <td valign="top">50</td> <td valign="top">2</td> <td valign="top">82</td> <td valign="top">R</td> <td valign="top">114</td> <td valign="top">r</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">19</td> <td valign="top">DC3</td> <td valign="top">51</td> <td valign="top">3</td> <td valign="top">83</td> <td valign="top">X</td> <td valign="top">115</td> <td valign="top">s</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">20</td> <td valign="top">DC4</td> <td valign="top">52</td> <td valign="top">4</td> <td valign="top">84</td> <td valign="top">T</td> <td valign="top">116</td> <td valign="top">t</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">21</td> <td valign="top">NAK</td> <td valign="top">53</td> <td valign="top">5</td> <td valign="top">85</td> <td valign="top">U</td> <td valign="top">117</td> <td valign="top">u</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">22</td> <td valign="top">SYN</td> <td valign="top">54</td> <td valign="top">6</td> <td valign="top">86</td> <td valign="top">V</td> <td valign="top">118</td> <td valign="top">v</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">23</td> <td valign="top">TB</td> <td valign="top">55</td> <td valign="top">7</td> <td valign="top">87</td> <td valign="top">W</td> <td valign="top">119</td> <td valign="top">w</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">24</td> <td valign="top">CAN</td> <td valign="top">56</td> <td valign="top">8</td> <td valign="top">88</td> <td valign="top">X</td> <td valign="top">120</td> <td valign="top">x</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">25</td> <td valign="top">EM</td> <td valign="top">57</td> <td valign="top">9</td> <td valign="top">89</td> <td valign="top">Y</td> <td valign="top">121</td> <td valign="top">y</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">26</td> <td valign="top">SUB</td> <td valign="top">58</td> <td valign="top">:</td> <td valign="top">90</td> <td valign="top">Z</td> <td valign="top">122</td> <td valign="top">z</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">27</td> <td valign="top">ESC</td> <td valign="top">59</td> <td valign="top">;</td> <td valign="top">91</td> <td valign="top">[</td> <td valign="top">123</td> <td valign="top">{</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">28</td> <td valign="top">FS</td> <td valign="top">60</td> <td valign="top"><</td> <td valign="top">92</td> <td valign="top">\</td> <td valign="top">124</td> <td valign="top">|</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">29</td> <td valign="top">GS</td> <td valign="top">61</td> <td valign="top">=</td> <td valign="top">93</td> <td valign="top">]</td> <td valign="top">125</td> <td valign="top">}</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">30</td> <td valign="top">RS</td> <td valign="top">62</td> <td valign="top">></td> <td valign="top">94</td> <td valign="top">^</td> <td valign="top">126</td> <td valign="top">~</td> </tr> <tr class="MsoNormalTable" align="middle"> <td valign="top">31</td> <td valign="top">US</td> <td valign="top">63</td> <td valign="top">?</td> <td valign="top">95</td> <td valign="top">?/td> <td valign="top">127</td> <td valign="top">DEL</td> </tr> </tbody> </table> <p> </p> <table cellspacing="0" cellpadding="0" width="600" border="1"> <tbody> <tr class="MsoNormalTable"> <td valign="top">NUL</td> <td valign="top">VT 垂直制表</td> <td valign="top">SYN I{同步</td> </tr> <tr class="MsoNormalTable"> <td valign="top">SOH  标题开?/td> <td valign="top">FF   走纸控制</td> <td valign="top">ETB  信息l传送结?/td> </tr> <tr class="MsoNormalTable"> <td valign="top">STX  正文开?/td> <td valign="top">CR   回R</td> <td valign="top">CAN  作废</td> </tr> <tr class="MsoNormalTable"> <td valign="top">ETX  正文l束</td> <td valign="top">SO   UM输出</td> <td valign="top">EM   U尽</td> </tr> <tr class="MsoNormalTable"> <td valign="top">EOY  传输l束</td> <td valign="top">SI    UM输入</td> <td valign="top">SUB  换置</td> </tr> <tr class="MsoNormalTable"> <td valign="top">ENQ  询问字符</td> <td valign="top">DLE  I格</td> <td valign="top">ESC  换码</td> </tr> <tr class="MsoNormalTable"> <td valign="top">ACK  承认</td> <td valign="top">DC1  讑֤控制1</td> <td valign="top">FS   文字分隔W?/td> </tr> <tr class="MsoNormalTable"> <td valign="top">BEL  报警</td> <td valign="top">DC2  讑֤控制2</td> <td valign="top">GS   l分隔符</td> </tr> <tr class="MsoNormalTable"> <td valign="top">BS   退一?/td> <td valign="top">DC3  讑֤控制3</td> <td valign="top">RS   记录分隔W?/td> </tr> <tr class="MsoNormalTable"> <td valign="top">HT   横向列表</td> <td valign="top">DC4  讑֤控制4</td> <td valign="top">US   单元分隔W?/td> </tr> <tr class="MsoNormalTable"> <td valign="top">LF   换行</td> <td valign="top">NAK  否定</td> <td valign="top">DEL  删除</td> </tr> </tbody> </table> <div> </div> <table cellspacing="0" cellpadding="0" width="600" border="0"> <tbody> <tr> <td align="middle"> <p> </p> <p>键盘常用ASCII?</p> </td> </tr> <tr> <td>ESC?VK_ESCAPE (27)<br />回R键: VK_RETURN (13)<br />TAB键: VK_TAB (9)<br />Caps Lock键: VK_CAPITAL (20)<br />Shift键: VK_SHIFT ($10)<br />Ctrl键: VK_CONTROL (17)<br />Alt键: VK_MENU (18)<br />I格键: VK_SPACE ($20/32)<br />退格键Q?VK_BACK (8)<br />左徽标键Q?VK_LWIN (91)<br />叛_标键Q?VK_LWIN (92)<br />鼠标右键快捷键:VK_APPS (93) <p>Insert键: VK_INSERT (45)<br />Home键: VK_HOME (36)<br />Page UpQ?VK_PRIOR (33)<br />PageDownQ?VK_NEXT (34)<br />End键: VK_END (35)<br />Delete键: VK_DELETE (46)</p><p>方向??Q?VK_LEFT (37)<br />方向??Q?VK_UP (38)<br />方向??Q?VK_RIGHT (39)<br />方向??Q?VK_DOWN (40)<br /></p><p>F1键: VK_F1 (112)<br />F2键: VK_F2 (113)<br />F3键: VK_F3 (114)<br />F4键: VK_F4 (115)<br />F5键: VK_F5 (116)<br />F6键: VK_F6 (117)<br />F7键: VK_F7 (118)<br />F8键: VK_F8 (119)<br />F9键: VK_F9 (120)<br />F10键: VK_F10 (121)<br />F11键: VK_F11 (122)<br />F12键: VK_F12 (123)<br /></p><p>Num Lock键: VK_NUMLOCK (144)<br />键?Q?VK_NUMPAD0 (96)<br />键?Q?VK_NUMPAD0 (97)<br />键?Q?VK_NUMPAD0 (98)<br />键?Q?VK_NUMPAD0 (99)<br />键?Q?VK_NUMPAD0 (100)<br />键?Q?VK_NUMPAD0 (101)<br />键?Q?VK_NUMPAD0 (102)<br />键?Q?VK_NUMPAD0 (103)<br />键?Q?VK_NUMPAD0 (104)<br />键?Q?VK_NUMPAD0 (105)<br />键?Q?VK_DECIMAL (110)<br />键?Q?VK_MULTIPLY (106)<br />键?Q?VK_MULTIPLY (107)<br />键?Q?VK_SUBTRACT (109)<br />键?Q?VK_DIVIDE (111)<br /></p><p>Pause Break键: VK_PAUSE (19)<br />Scroll Lock键: VK_SCROLL (145)</p></td> </tr> </tbody> </table> <div id="3n55nb3" class="postTitle">ASCII?</div> <p> </p> <table style="TABLE-LAYOUT: fixed" border="0"> <tbody> <tr> <td> <p align="center"> <font color="#ff0000" size="5"> <u>Table of ASCII Characters</u> </font> </p> <p> <font size="3">This table lists the ASCII characters and their decimal, octal and hexadecimal numbers. Characters which appear as names in parentheses (<em>e.g.</em>, <code><font face="新宋?>(nl)</font></code>) are non-printing characters. A table of the common non-printing characters appears after this table.</font> </p> <pre> <font size="3">Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex ------------------------------------------------------------------------------------- (nul) 0 0000 0x00 | (sp) 32 0040 0x20 | @ 64 0100 0x40 | ` 96 0140 0x60 (soh) 1 0001 0x01 | ! 33 0041 0x21 | A 65 0101 0x41 | a 97 0141 0x61 (stx) 2 0002 0x02 | " 34 0042 0x22 | B 66 0102 0x42 | b 98 0142 0x62 (etx) 3 0003 0x03 | # 35 0043 0x23 | C 67 0103 0x43 | c 99 0143 0x63 (eot) 4 0004 0x04 | $ 36 0044 0x24 | D 68 0104 0x44 | d 100 0144 0x64 (enq) 5 0005 0x05 | % 37 0045 0x25 | E 69 0105 0x45 | e 101 0145 0x65 (ack) 6 0006 0x06 | & 38 0046 0x26 | F 70 0106 0x46 | f 102 0146 0x66 (bel) 7 0007 0x07 | ' 39 0047 0x27 | G 71 0107 0x47 | g 103 0147 0x67 (bs) 8 0010 0x08 | ( 40 0050 0x28 | H 72 0110 0x48 | h 104 0150 0x68 (ht) 9 0011 0x09 | ) 41 0051 0x29 | I 73 0111 0x49 | i 105 0151 0x69 (nl) 10 0012 0x0a | * 42 0052 0x2a | J 74 0112 0x4a | j 106 0152 0x6a (vt) 11 0013 0x0b | + 43 0053 0x2b | K 75 0113 0x4b | k 107 0153 0x6b (np) 12 0014 0x0c | , 44 0054 0x2c | L 76 0114 0x4c | l 108 0154 0x6c (cr) 13 0015 0x0d | - 45 0055 0x2d | M 77 0115 0x4d | m 109 0155 0x6d (so) 14 0016 0x0e | . 46 0056 0x2e | N 78 0116 0x4e | n 110 0156 0x6e (si) 15 0017 0x0f | / 47 0057 0x2f | O 79 0117 0x4f | o 111 0157 0x6f (dle) 16 0020 0x10 | 0 48 0060 0x30 | P 80 0120 0x50 | p 112 0160 0x70 (dc1) 17 0021 0x11 | 1 49 0061 0x31 | Q 81 0121 0x51 | q 113 0161 0x71 (dc2) 18 0022 0x12 | 2 50 0062 0x32 | R 82 0122 0x52 | r 114 0162 0x72 (dc3) 19 0023 0x13 | 3 51 0063 0x33 | S 83 0123 0x53 | s 115 0163 0x73 (dc4) 20 0024 0x14 | 4 52 0064 0x34 | T 84 0124 0x54 | t 116 0164 0x74 (nak) 21 0025 0x15 | 5 53 0065 0x35 | U 85 0125 0x55 | u 117 0165 0x75 (syn) 22 0026 0x16 | 6 54 0066 0x36 | V 86 0126 0x56 | v 118 0166 0x76 (etb) 23 0027 0x17 | 7 55 0067 0x37 | W 87 0127 0x57 | w 119 0167 0x77 (can) 24 0030 0x18 | 8 56 0070 0x38 | X 88 0130 0x58 | x 120 0170 0x78 (em) 25 0031 0x19 | 9 57 0071 0x39 | Y 89 0131 0x59 | y 121 0171 0x79 (sub) 26 0032 0x1a | : 58 0072 0x3a | Z 90 0132 0x5a | z 122 0172 0x7a (esc) 27 0033 0x1b | ; 59 0073 0x3b | [ 91 0133 0x5b | { 123 0173 0x7b (fs) 28 0034 0x1c | < 60 0074 0x3c | \ 92 0134 0x5c | | 124 0174 0x7c (gs) 29 0035 0x1d | = 61 0075 0x3d | ] 93 0135 0x5d | } 125 0175 0x7d (rs) 30 0036 0x1e | > 62 0076 0x3e | ^ 94 0136 0x5e | ~ 126 0176 0x7e (us) 31 0037 0x1f | ? 63 0077 0x3f | _ 95 0137 0x5f | (del) 127 0177</font> 0x7f</pre> <pre> <table align="center"> <tbody> <tr> <th> <p align="center"> <font size="4">ASCII Name </font> </p> </th> <div align="center"> </div> <th align="left"> <font size="4">Description </font> </th> <div> </div> <div align="center"> </div> <th> <font size="4">C Escape Sequence </font> </th> <div> </div> </tr> <tr> <td> <p align="center"> <font size="4">nul </font> </p> </td> <td> <p align="center"> <font size="4">null byte </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\0 </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">bel </font> </p> </td> <td> <p align="center"> <font size="4">bell character </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\a </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">bs </font> </p> </td> <td> <p align="center"> <font size="4">backspace </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\b </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">ht </font> </p> </td> <td> <p align="center"> <font size="4">horizontal tab </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\t </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">np </font> </p> </td> <td> <p align="center"> <font size="4">formfeed </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\f </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">nl </font> </p> </td> <td> <p align="center"> <font size="4">newline </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\n </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">cr </font> </p> </td> <td> <p align="center"> <font size="4">carriage return </font> </p> </td> <td align="middle"> <p align="center"> <font size="4">\r </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">vt </font> </p> </td> <td> <p align="center"> <font size="4">vertical tab </font> </p> </td> <td> <p align="center"> <font size="4"> </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">esc </font> </p> </td> <td> <p align="center"> <font size="4">escape </font> </p> </td> <td> <p align="center"> <font size="4"> </font> </p> </td> </tr> <tr> <td> <p align="center"> <font size="4">sp </font> </p> </td> <td> <p align="center"> <font size="4">space </font> </p> </td> </tr> </tbody> </table> </pre> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/wenlong/aggbug/76611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-10-22 11:32 <a href="http://m.tkk7.com/wenlong/articles/76611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>|上查到的各U屏蔽代码!Q?/title><link>http://m.tkk7.com/wenlong/articles/76608.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Sun, 22 Oct 2006 02:57:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/76608.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/76608.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/76608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/76608.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/76608.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://m.tkk7.com/wenlong/articles/76608.html'>阅读全文</a><img src ="http://m.tkk7.com/wenlong/aggbug/76608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-10-22 10:57 <a href="http://m.tkk7.com/wenlong/articles/76608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读word内容(包含表格Q不包含囄Qƈ且显C在面中或保存q数据库?/title><link>http://m.tkk7.com/wenlong/articles/76607.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Sun, 22 Oct 2006 02:52:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/76607.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/76607.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/76607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/76607.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/76607.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://m.tkk7.com/wenlong/articles/76607.html'>阅读全文</a><img src ="http://m.tkk7.com/wenlong/aggbug/76607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-10-22 10:52 <a href="http://m.tkk7.com/wenlong/articles/76607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java正则表达?/title><link>http://m.tkk7.com/wenlong/articles/76604.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Sun, 22 Oct 2006 02:36:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/76604.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/76604.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/76604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/76604.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/76604.html</trackback:ping><description><![CDATA[ <h4 class="TextColor1" id="subjcns!83064727507EA7B6!148" style="MARGIN-BOTTOM: 0px"> <font color="#0000ff">java正则表达?/font> </h4> <div class="15l55r3" id="msgcns!83064727507EA7B6!148"> <div> <font color="#0000ff">文本处理l常涉及的根据一个pattern的匹配。尽java的character和assorted 的StringcL供了low-level的pattern-matching支持Q这U支持一般带来了复杂的代码。ؓ了帮助你书写单的pattern-matching代码Qjava提供了regular expression。在介绍l你术语和java.util.regex包之后,Jeff Friesen explores 了许多那个包的PatterncL持的正则表达式结构。然后他examines 了Pattern的方法和附加的java.util.regex cR作为结束,他提供了一个正则表辑ּ的实践应用?<br /><br />为察看术语列表,提示与警告,新的homeworkQ上个月homework的回{,q篇文章的相x料,误问study guide. (6,000 words; February 7, 2003) <br /><br />By Jeff Friesen QTranslated By humx <br /><br />文本处理l常的要求依据特定pattern匚w的代码。它能让文本索,email header验证Q从普通文本的自定义文本的创徏Q例如,?Dear Mr. Smith" 替代 "Dear Customer"Q,{等成ؓ可能。Java通过character和assorted stringcL持pattern matching。由于low-level的支持一般带来了复杂的pattern-matching代码Qjava同时提供了regular expression来简代码?<br /><br />Regular expressionsl常让新手迷惑。然? q篇文章驱散了大部分h。在介绍了regular expression术语Qjava.util.regex 包中的类, 和一个regular expression constructs的示例程序之? 我explore了许多PatterncL持的regular expression constructs。我也examine了组成Pattern 和java.util.regex 包中其它cȝҎ。一个practical 的正则表辑ּ的应用程序结束了我的讨论?<br /><br />Note <br /><br />Regular expressions的O长历史开始于计算机科学理论领域自动控制原理和formal 语言理论。它的历史gl到Unix和其它的操作pȝQ在那里正则表达式被l常用作在Unix和Unix-like的工具中Q像awkQ一个由其创作者,Aho, Weinberger, and KernighanQ命名,能够q行文本分析处理的编E语aQ? emacs (一个开发工?Q和grep (一个在一个或多个文g中匹配正则表辑ּQؓ了全局地正则表辑ּ打印的工兗?<br /><br /><br />什么是正则表达? <br />A regular expressionQ也被known as regex or regexpQ是一个描qC一个字W串集合的pattern(template)。这个pattern军_了什么样的字W串属于q个集合Q它由文本字W和元字W(metacharactersQ由有特D的而不是字W含义的字符Q组成。ؓ了识别匹配的索文本的q程—字W串满一个正则表辑ּ—称作模式匹配(pattern matchingQ?<br /><br />Java''s java.util.regex 包通过PatternQMatchercdPatternSyntaxException异常支持pattern matchingQ?<br /><br />Pattern 对象Q被known as patternsQ是~译的正则表辑ּ?<br />Matcher 对象Q或者matchersQ在Q实Cjava.lang.CharSequence接口q作为文本source的字W序列中定位解释matchers的引擎?<br />PatternSyntaxException 对象描述非法的regex patterns?<br />Listing 1 介绍q些c: <br /><br />Listing 1. RegexDemo.java <br /><br />// RegexDemo.java <br />import java.util.regex.*; <br /><br /><br />class RegexDemo { <br />public static void main (String [] args) { <br />if (args.length != 2) <br />System.err.println ("java RegexDemo regex text"); <br />return; <br />} <br />Pattern p; <br />try { <br />p = Pattern.compile (args [0]); <br />} <br />catch (PatternSyntaxException e) { <br />System.err.println ("Regex syntax error: " + e.getMessage ()); <br />System.err.println ("Error description: " + e.getDescription ()); <br />System.err.println ("Error index: " + e.getIndex ()); <br />System.err.println ("Erroneous pattern: " + e.getPattern ()); <br />return; <br />} <br /><br />String s = cvtLineTerminators (args [1]); <br />Matcher m = p.matcher (s); <br /><br />System.out.println ("Regex = " + args [0]); <br />System.out.println ("Text = " + s); <br />System.out.println (); <br />while (m.find ()) { <br />System.out.println ("Found " + m.group ()); <br />System.out.println (" starting at index " + m.start () + <br />" and ending at index " + m.end ()); <br />System.out.println (); <br />} <br />} <br /><br />// Convert \n and \r character sequences to their single character <br />// equivalents <br /><br />static String cvtLineTerminators (String s) { <br />StringBuffer sb = new StringBuffer (80); <br /><br />int oldindex = 0, newindex; <br />while ((newindex = s.indexOf ("\\n", oldindex)) != -1) { <br />sb.append (s.substring (oldindex, newindex)); <br />oldindex = newindex + 2; <br />sb.append (''\n''); <br />} <br />sb.append (s.substring (oldindex)); <br /><br />s = sb.toString (); <br /><br />sb = new StringBuffer (80); <br /><br />oldindex = 0; <br />while ((newindex = s.indexOf ("\\r", oldindex)) != -1) { <br />sb.append (s.substring (oldindex, newindex)); <br />oldindex = newindex + 2; <br />sb.append (''\r''); <br />} <br />sb.append (s.substring (oldindex)); <br /><br />return sb.toString (); <br />} <br />} <br /><br />RegexDemo''s public static void main(String [] args) Ҏvalidates 两个命o行参敎ͼ一个指出正则表辑ּQ另外一个指出文本。在创徏一个pattern之后Q这个方法{换所有的文本参数Qnew-line and carriage-return line-terminator 字符序列为它们的实际meanings 。例如,一个new-line字符序列(由反斜杠后跟n表示)转换成一个new-line字符Q用数字表示?0Q。在输出了regex和被转换的命令行文本参数之后Qmain(String [] args) Ҏ从pattern创徏了一个matcherQ它随后查找了所有的matches 。对于每一个matchQ它所出现的字W和信息的位|被输出?<br /><br />Z完成模式匚wQRegexDemo 调用了java.util.regex包中cȝ不同的方法。不要你自q在就理解q些ҎQ我们将在后边的文章探讨它们。更重要的是Q编?Listing 1: 你需要RegexDemo.class来探索Pattern''s regex l构?<br /><br />探烦Pattern''s regex 构?<br /><br />Pattern''s SDK 文档提供了一部分正则表达式结构的文档。除非你是一个avid正则表达式用者,一个最初的那段文档的阅M让你qh。什么是quantifiersQgreedy之间的不同是什? reluctant, ?possessive quantifiers? 什么是 character classesQ?boundary matchersQ?back references, ?embedded flag expressions? Z回答q些和其它的问题Q我们探索了许多Patter认可的regex constructs?regex pattern U类。我们从最单的regex construct 开始:literal strings?<br /><br />Caution <br /><br />不要认ؓPattern和Perl5的正则表辑ּl构是一L。尽他们有很多相同点,他们也有许多Q它们支持的metacharactersl构的不同点?(更多信息Q察看在你的q_上的你的SDK Patterncȝ文档? <br /><br /><br />Literal strings <br /><br />当你在字处理软g的检索对话框输入一个你指定一个literal string 的时候,你就指定了一个regex expression construct 。执行以下的RegexDemo 命o行来察看一下这个regex construct 的动作: <br /><br />java RegexDemo apple applet <br /><br />上边的这个命令行定了apple 作ؓ一个包含了字符a, p, p, l, and eQ依ơ)的字Wregex construct?q个命o行同时也定了applet 作ؓpattern-matching的文本。执行命令行以后Q看C下输出: <br /><br />Regex = apple <br />Text = applet <br /><br />Found apple <br />starting at index 0 and ending at index 5 <br /><br />输出的regex 和text 命o行,预示着在applet中一个applet的成功的匚wQƈ表示了匹配的开始和l束的烦引:分别??。开始烦引指Z一个pattern match出现的第一个文本的开始位|,l束索引指明了这个match后的W一个text的位|。换句话_匚w的text的范围包含在开始烦引和Ll束索引之间Q不包含l束索引Q?<br /><br />Metacharacters <br /><br />管string regex constructs 是有用的Q更强大的regex contsruct联合了文本字W和元字W。例如,在a.bQ这个句点metacharacter (.) 代表在a个b之间出现的Q何字W?Z察看元字W的动作Q?执行以下命o行: <br /><br />java RegexDemo .ox "The quick brown fox jumps over the lazy ox." <br /><br />以上命o指出.ox 作ؓregex Q和The quick brown fox jumps over the lazy ox.作ؓ文本源text。RegexDemo 索text来匹配以L字符开始以oxl束的matchQƈ产生如下输出Q?<br /><br />Regex = .ox <br />Text = The quick brown fox jumps over the lazy ox. <br /><br />Found fox <br />starting at index 16 and ending at index 19 <br /><br />Found ox <br />starting at index 39 and ending at index 42 <br /><br />q个输出展示了两个matches:fox和ox? metacharacter 在第一个match中匹配f Q在W二个match中匹配空根{?<br /><br />假如我们用前q的metacharacter 替换.ox会怎么样呢Q也是Q我们指定java RegexDemo . "The quick brown fox jumps over the lazy ox."会有什么样的输出,因ؓperiod metacharacter 匚wM字符Q?RegexDemo 在命令行输出每一个匹配字W,包括l尾的period字符?<br /><br />Tip <br /><br />Z指定.或者Q何的元字W作为在一个regex construct 作ؓliteral characterQ引用—{换meta状态到literal status—用以下两种Ҏ之一Q?<br /><br />在元字符之前攄反斜杠?<br />元字符攑֜\Q和\E之间Q例如:\Q.\EQ?<br />在每U情形下Q不要忘记在string literalQ例如:String regex = \\.; <br /><br />Q中出现Ӟ?\\. or \\Q.\\EQ的双倍的反斜杠。不要在当它在命令行参数中出现的时候用双倍的反斜杠?<br /><br /><br />Character classes <br /><br />有时我们限定产生的matchesC个特定的字符集和。例如,我们可以索元音a, e, i, o, and u QQ何一个元韛_W的出现都以为着一个match。A characterc, 通过在方括号之间的一个字W集和指定的regex construct Q帮我们完成q个d。Pattern 支持以下的character classesQ?<br /><br />单字W? 支持被依ơ放|的字符串ƈ仅匹配这些字W。例如:[abc] 匚w字符a, b, and c。以下的命o行提供了另外一个示例: <br />java RegexDemo [csw] cave <br /><br />java RegexDemo [csw] cave [csw]中c匚w在cave中的c。没有其它的匚w存在?<br /><br />否定: 以^ metacharacter 元字W开始且仅匹配没有在class中出现的字符。例如:[^abc]匚w所有除了a, b, 和c以外的字W,以下的命令行提供了另外一个示例: <br />java RegexDemo [^csw] cave <br /><br />java RegexDemo [^csw] cave 匚w在cave中遇到的a, v, 和e。没有其它的匚w存在?<br /><br />范围: 包含在元字符Q?Q左侧的字符开始,元字W(-Q右侧字W结束的所有字W。仅匚w在范围内的字W。例如: [a-z] 匚w所有的写字母。以下的命o行提供了另外一个示例: <br />java RegexDemo [a-c] clown <br /><br />java RegexDemo [a-c] clown 匚w在clown中的c。没有其它的匚w存在?<br /><br />Tip <br /><br />通过它们放|在一h在一个range character class内联合多个范围。例如:[a-zA-Z] 匚w所有的大写和小写字母?<br /><br /><br />联合: 由多个嵌套的character classesl成Q匹配属于联合结果的所有字W。例如:[a-d[m-p]] 匚w字符a到d和m到p?characters a through d and m through p。以下的命o行提供了另外一个示例: <br />java RegexDemo [ab[c-e]] abcdef <br /><br />java RegexDemo [ab[c-e]] abcdef 匚w它们在abcdef中的副本 a, b, c, d, and e。没有其它的匚w存在?<br /><br />交集: 由所有嵌套的class的共同部分组成,且仅匚w字符的共同部分。例如:[a-z&&[d-f]] 匚w字符d, e, ?f。以下的命o行提供了另外一个示例: <br />java RegexDemo [aeiouy&&[y]] party <br /><br />java RegexDemo [aeiouy&&[y]] party 匚w在party中的y。没有其它的匚w存在?<br /><br />差集: 由除了那些在否定嵌套character class中的字符外所有保留的字符l成。例如:[a-z&&[^m-p]] 匚w 字符a到l和q到z。以下的命o行提供了另外一个示例: <br />java RegexDemo [a-f&&[^a-c]&&[^e]] abcdefg <br /><br />java RegexDemo [a-f&&[^a-c]&&[^e]] abcdefg 匚w在abcdefg中的 d 和f。没有其它的匚w存在?<br /><br />预定义的character classes <br /><br />一些在regexes 中出现够次数的character classes 提供了shortcuts。Pattern用预定义的character class提供了这LshortcutsQ如Table 1所C。用预定义的character classes来简化你的regexes和最化regex语法错误?<br /><br />Table 1. 预定义的character classes <br /><br />Predefined character class <br />Description <br /><br />\d <br />A 数字?相当于[0-9]?<br /><br />\D <br />A 非数字。相当于[^0-9]?<br /><br />\s <br />A whitespace character。相当于[ \t\n\x0B\f\r]?<br /><br />\S <br />A 非空格字W。相当于[^\s]?<br /><br />\w <br />A 一个字W。相当于[a-zA-Z_0-9]?<br /><br />\W <br />A 非字W,相当于[^\w]?<br /><br /><br /><br /><br />随后的命令行CZ使用了\w预定义character class来identify 命o行中的所有word characters?<br /><br />java RegexDemo \w "aZ.8 _" <br /><br />上边的命令行产生了以下的输出Q它展示了句点和space characters 不被考虑为word characterQ?<br /><br />Regex = \w <br />Text = aZ.8 _ <br /><br />Found a <br />starting at index 0 and ending at index 1 <br /><br />Found Z <br />starting at index 1 and ending at index 2 <br /><br />Found 8 <br />starting at index 3 and ending at index 4 <br /><br />Found _ <br />starting at index 5 and ending at index 6 <br /><br />Note <br /><br />Pattern的SDK文档引用句点元字W作为匹配除了line terminatorQ一个或者两个标志一行结束的预定义的标志之外的Q何字W,除非 dotall mode (随后讨论)有效。Pattern 识别以下line terminatorsQ?<br /><br />The 回RW?(\r\) <br />The 回行W?(\n) <br />The 回RW紧跟回行符 (\r\n) <br />The 回行字符 (\u0085) <br />The 行分割字W?(\u2028) <br />The D落分割字符 (\u2029) <br /><br /><br />捕获l?<br /><br />Pattern支持在pattern匚w的过E中Q一个regex construct 调用capturing group 来保存ؓ了以后recall 的match的字W;此结构是由圆括号包围的字W序列。在捕获的group中的所有字W在匚w的过E中被作Z个单独的单元。例如,(Java) capturing group l合了字W?J, a, v, 和aZ个单独单元。Capturing group依据在text中Java的出现来匚wJava pattern。每一个match用下一个匹配的Java字符替代了前一个match保存的Java字符?<br /><br />Capturing groups 在其它capturing groups内被嵌套。例如:?Java( language))Q? language) ?Java)内嵌套。每一个嵌套或非嵌套的capturing group有它自己的数字,数字?开始,Capturing 数字从左边至叟뀂在q个例子中,(Java( language))是capturing group 1Q? language)是capturing group 2。在(a)(b)Q?a)是捕L1Q?b)是捕L2?<br /><br />每一个capturing group随后通过a back reference来recall保存的match。指定跟随在一个反斜杠后的数字来指CZ个capturing groupQback reference?recalls 一个capturing group捕获的文本字W。一个back reference 的出现导致了一个matcher 使用the back reference?capturing group number来recall捕获l保存的match Q然后用匹配的字符q行q一步的匚w操作。随后的CZC了ؓ了检查语法错误进行的text 搜烦的用法: <br /><br />java RegexDemo "(Java( language)\2)" "The Java language language" <br /><br />q个例子使用(Java( language)\2) regexZ查语法错误,来检索字W串The Java language languageQ那里Java直接地在两个q箋出现的language之前。Regex 指定了两个capturing groupsQ?number 1 is (Java( language)\2)Q?它匹配Java language languageQnumber 2 is ( language), 它匹配由language跟随的space characer。\2 back reference recalls number 2''s 保存的matchQ它允许matcher索空格后跟随language的第二次出现Qwhich 直接地跟随space character and language的第一ơ出现。随后的输出昄了RegexDemo''s matcher 扑ֈ了什么: <br /><br />Regex = (Java( language)\2) <br />Text = The Java language language <br /><br />Found Java language language <br />starting at index 4 and ending at index 26 <br /><br />量词 <br /><br />Quantifiers大概是理解v来最让hqh的regex l构。一部分h来自于尽力的理解18个量词逻辑Q六个基本逻辑被组lؓ三个主要逻辑Q。其它的一个؜淆来自于费尽?长度匚w的理解。一旦你理解了这个概念和18 categoriesQ?大部?假如不是全部)h消失?<br /><br />Note <br /><br />要地, 着一部分主要讨论18 个quantifier categories 和zero-length 匚w的概cؓ了更详尽的讨论和更多CZQ请学习The Java Tutoria ?Quantifiers"部分?<br /><br /><br />一个quantifier 是一个隐式或昄的ؓ一个patternl定一个数量值的正则表达式结构。这个数字D军_了匹配一个pattern的次数。Pattern的六个基本的quantifiers匚w一个pattern一ơ或者根本不匚wQ?ơ或者多ơ,一ơ或者多ơ,一个精的数字ơ数Q至xơ和 臛_xơ但不超qyơ?<br /><br />六个基本的quantifier categories 在每一个三个主要的cdQgreedyQ?reluctant?possessive中复制。Greedy quantifiers 试扑ֈ最长的匚w。与之对照,reluctant quantifiers 试扑ֈ最短的匚w。Possessive quantifiers 也尝试找到最长的匚w。然而,他们和greedy quantifies在工作方式上不同。尽greedy 和possessive quantifiers q一个matcher 在进行第一ơ匹配之前读取整个的textQgreedy quantifiers 常常DZ扑ֈ一个matchq行多次试Q然而possessive quantifiers 让一个matcher 仅尝试一个match一ơ?<br /><br />随后的示例描qC六种基本的quantifiers 在greedy categorycd下,单个fundamental quantifier 在每一?reluctant ?possessive categoriescd下的行ؓ。这些示例也描述?匚w的概念: <br /><br />1. java RegexDemo a? abaa: 使用一个greedy quantifier 来在abaa中匹配a 一ơ或者根本不匚w。以下是输出l果Q?<br /><br />Regex = a? <br />Text = abaa <br /><br />Found a <br />starting at index 0 and ending at index 1 <br /><br />Found <br />starting at index 1 and ending at index 1 <br /><br />Found a <br />starting at index 2 and ending at index 3 <br /><br />Found a <br />starting at index 3 and ending at index 4 <br /><br />Found <br />starting at index 4 and ending at index 4 <br /><br />q个输出展示了五ơ匹配。尽第一、三和四ơ匹配的出现展示了三ơ匹配中位置q不奇怪,W一、第五次的匹配大概有点奇怪。这个匹配好像指出a匚wb和文本的l束。然而,不是q种情况。a?q不查找b和文本结。相反, 它查找a的出现或者缺失。当a? 查找ap|的时候,它以雉度的匚wq回那个事实(a~失)Q在雉度那里v始和l束位置的烦引相同。Zero-length matches 发生在空文本, 最后一个文本字W之后,或者Q何量个字W之间?<br /><br />2. java RegexDemo a* abaa: 使用一个greedy quantifier在abaa 中匹配a零次或多ơ。以下是输出l果Q?<br /><br />Regex = a* <br />Text = abaa <br /><br />Found a <br />starting at index 0 and ending at index 1 <br /><br />Found <br />starting at index 1 and ending at index 1 <br /><br />Found aa <br />starting at index 2 and ending at index 4 <br /><br />Found <br />starting at index 4 and ending at index 4 <br /><br />输出展示了四ơ匹配。像使用 a?Qa* 产生了zero-length 匚w。第三个匚wQa* 匚w了aa, 很有。不?a?Qa* 匚w一个或者多个连l的a?<br /><br />3. java RegexDemo a+ abaa: 使用一个greedy quantifier在abaa 中匹配a一ơ或多次。以下是输出l果Q?<br /><br />Regex = a+ <br />Text = abaa <br /><br />Found a <br />starting at index 0 and ending at index 1 <br /><br />Found aa <br />starting at index 2 and ending at index 4 <br /><br />输出展示了两个匹?。不?a? ?a*Qa+ 没有匚wa的却失。因而,没有雉度匹配生。像 a*Qa+匚w了连l的a?<br /><br />4. java RegexDemo a{2} aababbaaaab: 使用greedy quantifier 来匹配中的每一?aababbaaaab中的 aa序列。以下是输出l果Q?<br /><br />Regex = a{2} <br />Text = aababbaaaab <br /><br />Found aa <br />starting at index 0 and ending at index 2 <br /><br />Found aa <br />starting at index 6 and ending at index 8 <br /><br />Found aa <br />starting at index 8 and ending at index 10 <br /><br />5. java RegexDemo a{2,} aababbaaaab: 使用了greedy quantifier 来匹配在ababbaaaab中两个或更多的匹配,以下是输出结果: <br /><br />Regex = a{2,} <br />Text = aababbaaaab <br /><br />Found aa <br />starting at index 0 and ending at index 2 <br /><br />Found aaaa <br />starting at index 6 and ending at index 10 <br /><br />6. java RegexDemo a{1,3} aababbaaaab: 使用greedy quantifier 来匹配在aababbaaaab中出现的a、aa或者aaa。以下是输出l果Q?<br /><br />Regex = a{1,3} <br />Text = aababbaaaab <br /><br />Found aa <br />starting at index 0 and ending at index 2 <br /><br />Found a <br />starting at index 3 and ending at index 4 <br /><br />Found aaa <br />starting at index 6 and ending at index 9 <br /><br />Found a <br />starting at index 9 and ending at index 10 <br /><br />7. java RegexDemo a+? abaa: 使用一个reluctant quantifier 在abaa中一ơ或多次匚wa。以下是输出l果Q?<br /><br />Regex = a+? <br />Text = abaa <br /><br />Found a <br />starting at index 0 and ending at index 1 <br /><br />Found a <br />starting at index 2 and ending at index 3 <br /><br />Found a <br />starting at index 3 and ending at index 4 <br /><br />不像在第三个例中的greedy变量Qreluctant CZ产生了三个单独的匚wQ因为reluctant quantifier力的查找最短的匚w?<br /><br />8. java RegexDemo .*+end "This is the end": 使用了possessive quantifier 来匹配在this is the end中的以endl尾的Q意字W?ơ或者多ơ。以下是输出l果Q?<br /><br />Regex = .*+end <br />Text = This is the end <br /><br />׃q个possessive quantifier consume了整个文本,没有留下M东西来匹配endQ它没有产生匚w。相比之下,在java RegexDemo .*end "This is the end" 的greedy quantifierQ因为它每次backing off一个字W直到最右端的end匚wQ生了一个匹配?q个quantifier与greedy的不同就在后者的匚wq程中一旦匹配的字符Q在随后的匹配中׃再用。因?*q部分正则表辑ּ匹配了全部的字W串Q就没有字符可以与end匚w了? <br /><br />Boundary matchers <br /><br />我们有时惛_一行的开始、在单词的边界、文本的l束{等匚wpattern。?boundary matcherQ一个指定了匚w边界的正则表辑ּl构Q完成这个Q务。Table 2 表示了Pattern的边界匹配支持?<br /><br />Table 2. Boundary matchers <br /><br />Boundary Matcher <br />Description <br /><br />^ <br />一行的开?<br /><br />$ <br />一行的l束 <br /><br />\b <br />单词的边?<br /><br />\B <br />非单词边?<br /><br />\A <br />文本的开?<br /><br />\G <br />前一个匹配的l束 <br /><br />\Z <br />The end of the text (but for the final line terminator, if any) <br /><br />\z <br />文本l束 <br /><br /><br /><br /><br />下边的命令行CZ使用了^ 边界匚w元字W?ensure 由零个或者多个字W跟随的行开始?<br /><br />java RegexDemo ^The\w* Therefore <br /><br />^ 指出了前三个字符必须匚wpattern后的T、h和e字符。可跟随L数量的字W。以上的命o行生以下输出: <br /><br />Regex = ^The\w* <br />Text = Therefore <br /><br />Found Therefore <br />starting at index 0 and ending at index 9 <br /><br />把命令行改ؓjava RegexDemo ^The\w* " Therefore"。发生了什么事?因ؓ在therefore前的一个空|没有匚w被发现?<br /><br />Embedded flag expressions <br /><br />Matcher假设了确定的却省|例如大小写敏感的匚w。一个程序可以用an embedded flag expression 来覆盖缺省|也就是,使用一个正则表辑ּl构Q圆括号元字W包围一个问号元字符后跟写字母。Pattern认可以下的embedded flag expressions Q?<br /><br />(?i): enables 大小写不敏感的pattern 匚w。例如:java RegexDemo (?i)tree Treehouse 来匹配tree和Tree。大写敏感是缺省倹{?<br />(?x): 允许I格和注释用#元字W开始出现在Pattern中。一个matcher 忽略全部它们。例如:java RegexDemo ".at(?x)#match hat, cat, and so on" matter 匚w.at和mat。缺省地Q空格和注释式不被允许的Q一个matcher 它们考虑为对match有A献的字符?<br />(?s): 使dotall 方式有效。在q种模式中,句点除了其它字符外还匚wtextl束?例如Qjava RegexDemo (?s). \n Q? 匚w?\n。Nondotall 方式是缺省的Q不匚w行结?<br />(?m): 使多行方式有效。在多行模式?^ and $ 恰好分别的在一行的l结或末端之后或者之前。例如:java RegexDemo (?m)^.ake make\rlake\n\rtake 匚w .ake ?make?lake?take。非多行模式是缺省的Q?^ and $ match仅在整个文本的开始和l束?<br />(?u): enables Unicode-aware case folding. This flag works with (?i) to perform case-insensitive matching in a manner consistent with the Unicode Standard. The default: case-insensitive matching that assumes only characters in the US-ASCII character set match?<br />(?d): enables Unix lines mode. In that mode, a matcher recognizes only the \n line terminator in the context of the ., ^, and $ metacharacters. Non-Unix lines mode is the default: a matcher recognizes all terminators in the context of the aforementioned metacharacters?<br />Embedded flag expressions cM?capturing groups因ؓ两个regex constructs都用圆括号包围字W。不像capturing groupQembedded flag expression 没有捕获匚w的字W。因而,一个embedded flag expression是noncapturing group的特例。也是_一个不捕获text字符的regex construct Q它指定了由元字W圆括号包围的字W序列。在Pattern''s SDK 文档中出C一些noncapturing groups?<br /><br />Tip <br /><br />Z在正则表辑ּ中指定多个embedded flag 表达式。或者吧它们q排的放在一?(e.g., (?m)(?i)) 或?把它们的写字母q排的放在一?(e.g., (?mi))?<br /><br /><br />探烦java.util.regex cȝҎ <br /><br />java.util.regex包的三个cL供了为帮我书写更健壮的正则表辑ּ代码和创建强大的text处理工具许多的方法?我们从Patterncd始探索这些方法?<br /><br />Note <br /><br />你也可以explore CharSequence 接口的当你创Z个新的字W序列类要实现的Ҏ。仅实现 CharSequence 接口的类是java.nio.CharBufferQ?StringQ??StringBuffer?<br /><br /><br />Pattern Ҏ <br /><br />除非代码一个string~译为Pattern对象一个regex表达式式没有用处的。用以下~辑Ҏ中的一个完成这个Q务: <br /><br />public static Pattern compile(String regex): regex内容~译为在一个新的Pattern对象内存储的树状l构的对象表C。返回那个对象引用。例如:Pattern p = Pattern.compile ("(?m)^\\.")Q创Z一个,存储了一个编译的表示了匹配以句点开始的行的表示?<br />public static Pattern compile(String regex, int flags): 完成前一个方法的相同d。然而,它同时考虑包含了flag帔RQflags指定的)。Flag帔R在Pattern中(except the canonical equivalence flag, CANON_EQQ被作ؓ二选一的embedded flag expressions被声明。例如:Pattern p = Pattern.compile ("^\\.", Pattern.MULTILINE)Q和上一个例子等PPattern.MULTILINE 帔R和the (?m) embedded flag 表达式完成相同的d?参考SDK''s Pattern 文档学习其它的常量? 假如不是q些在Pattern中被定义的常量在flag中出玎ͼҎ抛出IllegalArgumentException 异常?<br />假如需要,通过调用以下Ҏ可以得到一个Pattern对象的flag和最初的被编译ؓ对象的正则表辑ּQ?<br /><br />public int flags(): q回当正则表辑ּ~译时指定的Pattern的flag。例如:System.out.println (p.flags ())Q?输出p引用的的Pattern相关的flag?<br />public String pattern(): q回最初的被编译进Pattern的正则表辑ּ。例如:System.out.println (p.pattern ())Q?输出对应p引用Pattern的正则表辑ּ。(Matcher cd含了cM的返回Matcher相关的Pattern对象的Pattern pattern() Ҏ。) <br />在创Z个Pattern对象后,你一般的通过调用Pattern的公有方法matcher(CharSequence text)获得一个Matcher对象。这个方法需要一个简单的Q实CCharSequence接口的文本对象参数。获得的对象在pattern匚w的过E中扫描输入的文本对象。例如:Pattern p = Pattern.compile ("[^aeiouy]"); Matcher m = p.matcher ("This is a test."); 获得一个在text中匹配所有非元音字母的matcher?<br /><br />当你x查一个pattern是否完全的匹配一个文本序列的时候创建Pattern和Matcher对象是o人烦恼的。幸q的是,Pattern提供了一个方便的Ҏ完成q个dQpublic static boolean matches(String regex, CharSequence text)。当且仅当整个字W序列匹配regex的pattern的场合下静态方法返回布值true。例如:System.out.println (Pattern.matches ("[a-z[\\s]]*", "all lowercase letters and whitespace only"));q回布尔值trueQ?指出仅空格字W和写字符在all lowercase letters and whitespace only中出现?<br /><br />书写代码text分成它的l成部分(例如雇员记录文gC个字D늚set) 是许多开发者发C味的d。Pattern 通过提供一对字W分割方法来减轻那种tedium?<br /><br />public String [] split(CharSequence text, int limit): 分割在当前的Pattern对象的pattern匚w周围的text。这个方法返回一个数l,它的每一个条目指定了一个从下一个由pattern匚w(或者文本结?分开的字W序列;且所有条目以它们在text中出现相同的序存储。书l条目的数量依赖于limitQ它同时也控制了匚w发生ơ数。一个正数意味着Q至多,limit-1 个匹配被考虑且数l的长度不大于限定的条目数。一个负g为着所有匹配的可能都被考虑且数l可以Q意长。一?g为着所有可能匹配的条目都被考虑Q数l可以有L的长度,且尾部的I字W串被丢弃?<br />public String [] split(CharSequence text): ?作ؓ限制调用前边ҎQ返回方法调用的l果?<br />假如你想一个拆分雇员记录,包含了姓名,q龄Q街道和工资Qؓ它的l成部分。以下的代码用split(CharSequence text)Ҏ完成了这个Q务: <br /><br />Pattern p = Pattern.compile (",\\s"); <br />String [] fields = p.split ("John Doe, 47, Hillsboro Road, 32000"); <br />for (int i = 0; i < fields.length; i++) <br />System.out.println (fields [i]); <br /><br />The code fragment above specifies a regex that matches a comma character immediately followed by a single-space character and produces the following output: <br /><br />John Doe <br />47 <br />Hillsboro Road <br />32000 <br /><br />Note <br /><br />String合ƈ了三个方便的Ҏ调用它们{h的PatternҎQ?public boolean matches(String regex), public String [] split(String regex), and public String [] split(String regex, int limit)?<br /><br /><br />Matcher Ҏ <br /><br />Matcher对象支持不同cd的pattern匚w操作Q例如扫描text查找下一个matchQ尝试根据一个pattern来匹配整个文本;Ҏ一个pattern试匚w部分text。用以下的方法完成这些Q务: <br /><br />public boolean find(): 扫描text查找下一个match。此ҎQ或者在text的开始扫描,假如上一ơ的Ҏ调用q回true且这个matcher没有被resetQ在前一个match后的W一个字W开始扫描。假如一个match被找到的话返回布值true。Listing 1 展示了一个例子?<br />public boolean find(int start): 重新安排matcher扫描下一个match。扫描从start指定的index开始。假如一个match被找到的话返回布值true。例如:m.find (1); 从index1开始扫描?索引0被忽略?假如start包含了一个负数或者一个超Zmatcfher的text长度的|q个Ҏ抛出IndexOutOfBoundsException异常?<br />public boolean matches(): 试Ҏpattern匚w整个text。在q个text匚w的情形下q回true。例如: Pattern p = Pattern.compile ("\\w*"); Matcher m = p.matcher ("abc!"); System.out.println (m.matches ()); 输出false因ؓ整个abc! text 包含了非字母word characters?<br />public boolean lookingAt(): 试Ҏpattern匚wtext。假如一个match被找到的话返回布值true?不像 matches()Q?整个text不需要被匚w。例如:Pattern p = Pattern.compile ("\\w*"); Matcher m = p.matcher ("abc!"); System.out.println (p.lookingAt ()); 输出true因ؓtext abc!的开始部分仅包含word 字符?<br />不像Pattern对象QMatcher 包含了状态信息。有Ӟ你在一个pattern 匚w后想reset一个matcher清除那些信息。下边的Ҏreset了一个matcherQ?<br /><br />public Matcher reset(): 重置了一个matcher的状态,包括matcher的append position(被清除ؓ0)。下一个pattern的匹配操作从matcher新文本的起始开始。返回当前的matcher对象引用。例如:m.reset (); 通过引用m重置了matcher?<br />public Matcher reset(CharSequence text): 重新讄一个matcher的状态且讄了matcher的文本内同。下一个pattern的匹配操作在matcher新的文本的v始位|开始。返回当前的matcher对象引用。例如:m.reset ("new text"); 重置m引用的对象ƈ制定 新的text作ؓmatcher的新text?<br />一个matcher的append position 军_了matcher的text的追加到一个StringBuffer对象中的开始位|。以下的Ҏ使用了append positionQ?<br /><br />public Matcher appendReplacement(StringBuffer sb, String replacement): dmatcher的textq将它们q加到sb引用的StringBuffer对象。这个方法在前一个pattern match的最后一个字W之后停止读取。此method 然后dreplacement引用的中的characters 到StringBuffer 对象?替换字符串可以包含上一个匹配捕L文本的引用,通过dollar-sign characters ($) ?capturing group ? 最l,q个Ҏ讄了matcher的append position为最后一个匹配字W的位置加上1。一个当前的matcher对象的引用返回。假如这个matcher对象q没有执行match或者上ơ的match试p|此方法将抛出一个IllegalStateException 异常。假如replacement指定了一个pattern中不存在的capturing group 一个IndexOutOfBoundsException异常被抛出?<br />public StringBuffer appendTail(StringBuffer sb): q加所有的text 到StringBuffer对象q返回对象引用。在最后一ơ调用appendReplacement(StringBuffer sb, String replacement) Ҏ之后Q调用appendTail(StringBuffer sb) copy剩余的text到StringBuffer对象?<br />随后的例子调用appendReplacement(StringBuffer sb, String replacement) ?appendTail(StringBuffer sb) Ҏ来替换所有在one cat, two cats, or three cats on a fence 中出现的cat为caterpillar。一个capturing group ?在replacement中的capturing group的引用允许在每一个cat匚w后插入erpillarQ?<br /><br />Pattern p = Pattern.compile ("(cat)"); <br />Matcher m = p.matcher ("one cat, two cats, or three cats on a fence"); <br />StringBuffer sb = new StringBuffer (); <br /><br />while (m.find ()) <br />m.appendReplacement (sb, "$1erpillar"); <br /><br />m.appendTail (sb); <br />System.out.println (sb); <br /><br />此示例生如下输出: <br /><br />one caterpillar, two caterpillars, or three caterpillars on a fence <br /><br />其它的两个替换方法用替换的文本替换W一个match和所有的match成ؓ可能Q?<br /><br />public String replaceFirst(String replacement): 重置matcherQ创Z个新的String对象Q拷贝所有匹配的文本字符Q直到第一个matchQ到StringQ追加替换字W到StringQ拷贝剩余的字符到StrringQƈq回对象引用。(替换字符串可以包含上一个匹配捕L文本的引用,通过dollar-sign characters ($) ?capturing group 数。) <br />public String replaceAll(String replacement): 操作和上一个方法类伹{然而,replaceAll(String replacement) 用替换字W替换所有匹配?<br />正则表达式\s+ 探测在文本中出现的一ơ或多次出现的空根{随后的例子使用了这个regex q调用了replaceAll(String replacement) Ҏ来从text删除duplicate whitespace Q?<br /><br />Pattern p = Pattern.compile ("\\s+"); <br />Matcher m = p.matcher ("Remove the \t\t duplicate whitespace. "); <br />System.out.println (m.replaceAll (" ")); <br /><br />此示例生如下输出: <br /><br />Remove the duplicate whitespace. <br /><br />Listing 1 包含了System.out.println ("Found " + m.group ());. 注意Ҏ调用group()。此Ҏ是capturing group-oriented 的MatcherҎQ?<br /><br />public int groupCount(): q回在matcher的pattern中capturing groups 的个数。这个计数没有包含特定的capturing group 数字 0Q它捕获前一个matchQ不一个pattern包含capturing groups与否。) <br />public String group(): 通过capturing group 数字 0记录q回上一个match的字W。此Ҏ可以Ҏ一个空的字W串q回一个空字符丌Ӏ假如matchq没有被试或者上ơ的match操作p|抛出IllegalStateException异常?<br />public String group(int group): 像上一个方法,除了通过group指定的capturing group numberq回以前的match字符外。假如没有group number 指定的capturing group在pattern中存在,此方法抛?一个IndexOutOfBoundsException 异常?<br />以下代码C了the capturing group ҎQ?<br /><br />Pattern p = Pattern.compile ("(.(.(.)))"); <br />Matcher m = p.matcher ("abc"); <br />m.find (); <br /><br />System.out.println (m.groupCount ()); <br />for (int i = 0; i <= m.groupCount (); i++) <br />System.out.println (i + ": " + m.group (i)); <br /><br />The example produces the following output: <br /><br />3 <br />0: abc <br />1: abc <br />2: bc <br />3: c <br /><br />Capturing group 数字0 保存了previous match 且与has nothing to do with whether 一个capturing group在一个pattern中出C否没有Q何关pR也是 is (.(.(.)))。其它的三个capturing groups捕获了previous match属于q个capturing groups的字W。例如,number 2, (.(.)), 捕获 bc; and number 3, (.), 捕获 c. <br /><br />在我们离开讨论Matcher的方法之前,我们examine四个match位置ҎQ?<br /><br />public int start(): q回previous match的开始位|。假如matchq没有被执行或者上ơ的matchp|Q此Ҏ抛出一个IllegalStateException异常?<br />public int start(int group): cM上一个方法,除了q回group指定的capturing group 的相关的previous match 的开始烦引外Q假如在pattern中没有指定的capturing group number 存在Qstart(int group) 抛出IndexOutOfBoundsException 异常?<br />public int end(): q回上次match中匹配的字符的烦引位|加?。假如matchq没有被试或者上ơ的match操作p|抛出IllegalStateException异常?<br />public int end(int group): cM上一个方法,除了q回group指定的capturing group 的相关的previous match 的end索引外。假如在pattern中没有指定的capturing group number 存在Qend(int group) 抛出IndexOutOfBoundsException 异常?<br />下边的示例示范了两个match position ҎQؓcapturing group number 2报告起始/l束match 位置Q?<br /><br />Pattern p = Pattern.compile ("(.(.(.)))"); <br />Matcher m = p.matcher ("abcabcabc"); <br /><br />while (m.find ()) <br />{ <br />System.out.println ("Found " + m.group (2)); <br />System.out.println (" starting at index " + m.start (2) + <br />" and ending at index " + m.end (2)); <br />System.out.println (); <br />} <br /><br />The example produces the following output: <br /><br />Found bc <br />starting at index 1 and ending at index 3 <br /><br />Found bc <br />starting at index 4 and ending at index 6 <br /><br />Found bc <br />starting at index 7 and ending at index 9 <br /><br />输出show我们仅仅对与capturing group number 2相关的matcher感兴,也就是这些匹配的起始l束位置?<br /><br />Note <br /><br />String 引入了两个方便的和调用Matcher{h的方法:public String replaceFirst(String regex, String replacement) ?public String replaceAll(String regex, String replacement)?<br /><br /><br />PatternSyntaxException methods <br /><br />Pattern的方法当它们发现非法的正则表辑ּ语法错误的时候抛出PatternSyntaxException 异常。一个异常处理器可以调用PatternSyntaxException 的方法来获得抛出的关于语法错误的PatternSyntaxException 对象的信息?<br /><br />public String getDescription(): q回语法错误描述?<br />public int getIndex(): q回语法错误发生位置的近似烦引或-1Q假如index是未知的?<br />public String getMessage(): 建立一个多行的Q包含了其它三个Ҏq回的信息的l合Q以可视的方式指出在pattern中错误的位置字符丌Ӏ?<br />public String getPattern(): q回不正的正则表达式?<br />因ؓPatternSyntaxException 从java.lang.RuntimeExceptionl承而来Q代码不需要指定错误handler。This proves appropriate when regexes are known to have correct patterns。但当有潜在的pattern语法错误存在的时候,一个异常handler是必需的。因而,RegexDemo的源代码(参看 Listing 1) 包含了try { ... } catch (ParseSyntaxException e) { ... }Q它们调用了PatternSyntaxException四个异常Ҏ中的每一个来获得非法pattern的信息?<br /><br />什么组成了非法的pattern?在embedded flag expression 中没有指定结束的元字W结束符号就是一个例。假如你执行java RegexDemo (?itree Treehouse。此命o的非法正则表辑ּ(?tree pattern D p = Pattern.compile (args [0]); 抛出PatternSyntaxException 异常。你看到如下输出: <br /><br />Regex syntax error: Unknown inline modifier near index 3 <br />(?itree <br />^ <br />Error description: Unknown inline modifier <br />Error index: 3 <br />Erroneous pattern: (?itree <br /><br />Note <br /><br />public PatternSyntaxException(String desc, String regex, int index) 构造函数让你创Z自己的PatternSyntaxException对象Q?That constructor comes in handy should you ever create your own preprocessing compilation method that recognizes your own pattern syntax, translates that syntax to syntax recognized by Pattern''s compilation methods, and calls one of those compilation methods. If your method''s caller violates your custom pattern syntax, you can throw an appropriate PatternSyntaxException object from that method?<br /><br /><br />一个正则表辑ּ应用实践 <br /><br />Regexes let you create powerful text-processing applications. One application you might find helpful extracts comments from a Java, C, or C++ source file, and records those comments in another file. Listing 2 presents that application''s source code: <br /><br />Listing 2. ExtCmnt.java <br /><br />// ExtCmnt.java <br /><br />import java.io.*; <br />import java.util.regex.*; <br /><br />class ExtCmnt <br />{ <br />public static void main (String [] args) <br />{ <br />if (args.length != 2) <br />{ <br />System.err.println ("usage: java ExtCmnt infile outfile"); <br />return; <br />} <br /><br />Pattern p; <br />try <br />{ <br />// The following pattern lets this extract multiline comments that <br />// appear on a single line (e.g., /* same line */) and single-line <br />// comments (e.g., // some line). Furthermore, the comment may <br />// appear anywhere on the line. <br /><br />p = Pattern.compile (".*/\\*.*\\*/|.*//.*$"); <br />} <br />catch (PatternSyntaxException e) <br />{ <br />System.err.println ("Regex syntax error: " + e.getMessage ()); <br />System.err.println ("Error description: " + e.getDescription ()); <br />System.err.println ("Error index: " + e.getIndex ()); <br />System.err.println ("Erroneous pattern: " + e.getPattern ()); <br />return; <br />} <br /><br />BufferedReader br = null; <br />BufferedWriter bw = null; <br /><br />try <br />{ <br />FileReader fr = new FileReader (args [0]); <br />br = new BufferedReader (fr); <br /><br />FileWriter fw = new FileWriter (args [1]); <br />bw = new BufferedWriter (fw); <br /><br />Matcher m = p.matcher (""); <br />String line; <br />while ((line = br.readLine ()) != null) <br />{ <br />m.reset (line); <br />if (m.matches ()) /* entire line must match */ <br />{ <br />bw.write (line); <br />bw.newLine (); <br />} <br />} <br />} <br />catch (IOException e) <br />{ <br />System.err.println (e.getMessage ()); <br />return; <br />} <br />finally // Close file. <br />{ <br />try <br />{ <br />if (br != null) <br />br.close (); <br /><br />if (bw != null) <br />bw.close (); <br />} <br />catch (IOException e) <br />{ <br />} <br />} <br />} <br />} <br /><br />在创建Pattern 和Matcher 对象之后QExtCmnt 逐行的读取一个文本文件的内容。对于每一行,matcher试匚wpattern的行Q鉴别是一个单行的注释或者多行的注释在一行中出现。假如一行匹配patternQExtCmnt 此行写入另外一个文本文件中。例如,java ExtCmnt ExtCmnt.java out dExtCmnt.java 文g的每一行,Ҏpattern来尝试着一行,匹配的行输出到名叫out的文件?(不要担心理解文g的读写逻辑。我在来的文章中exploreq些代码? 在ExtCmnt执行完成Qout 文g包含了以下行Q?<br /><br />// ExtCmnt.java <br />// The following pattern lets this extract multiline comments that <br />// appear on a single line (e.g., /* same line */) and single-line <br />// comments (e.g., // some line). Furthermore, the comment may <br />// appear anywhere on the line. <br />p = Pattern.compile (".*/\\*.*\\*/|.*//.*$"); <br />if (m.matches ()) /* entire line must match */ <br />finally // Close file. <br /><br />q个输出昄ExtCmnt q不完美Qp = Pattern.compile (".*/\\*.*\\*/|.*//.*$"); 没有描绘一个注释。出现在out中的行因为ExtCmnt的matcher匚w?/字符?<br /><br />关于pattern ".*/\\*.*\\*/|.*//.*$"׃些有的事,竖线元字Wmetacharacter (|)。依照SDK documentationQ圆括号元字W在capturing group?竖线元字W是逻辑操作W号。vertical bar 描述了一个matcherQ它使用操作W左侧的正则表达式结构来在matcher的文本中定ؓ一个match。假如没有match存在Qmatcher使用操作W号右侧的正则表辑ּq行再次的匹配尝试?<br /><br />温习 <br /><br />管正则表达式简化了在text处理E序中pattern匚w的代码,除非你理解它们,否则你不能有效的在你的程序中使用正则表达式。这文章通过介绍l你regex terminologyQthe java.util.regex 包和Cregex constructs的程序来让你Ҏ则表辑ּ有一个基本的理解。既然你对regexes有了一个基本的理解Q徏立在通过阅读additional articles (see Resources)和学习java.util.regex''s SDK 文档Q那里你可以学习更多的regex constructs Q例如POSIX (Portable Operating System Interface for Unix) 字符cR?<br /><br />我鼓׃用这文章中或者其它以前文章中资料中问题email me?请保持问题和q个栏目讨论的文章相x?你的问题和我的回{将出现在相关的学习guides中? <br /><br />After writing Java 101 articles for 28 consecutive months, I''m taking a two-month break. I''ll return in May and introduce a series on data structures and algorithms. <br />About the author <br /><br />Jeff Friesen has been involved with computers for the past 23 years. He holds a degree in computer science and has worked with many computer languages. Jeff has also taught introductory Java programming at the college level. In addition to writing for JavaWorld, he has written his own Java book for beginners—Java 2 by Example, Second Edition (Que Publishing, 2001; ISBN: 0789725932)—and helped write Using Java 2 Platform, Special Edition (Que Publishing, 2001; ISBN: 0789724685). Jeff goes by the nickname Java Jeff (or JavaJeff). To see what he''s working on, check out his Website at http://www.javajeff.com. <br /><br />Resources <br /><br />Download this article''s source code and resource files: <br />http://www.javaworld.com/javaworld/jw-02-2003/java101/jw-0207-java101.zip <br />For a glossary specific to this article, homework, and more, see the Java 101 study guide that accompanies this article: <br />http://www.javaworld.com/javaworld/jw-02-2003/jw-0207-java101guide.html <br />"Magic with Merlin: Parse Sequences of Characters with the New regex Library," John Zukowski (IBM developerWorks, August 2002) explores java.util.regex''s support for pattern matching and presents a complete example that finds the longest word in a text file: <br />http://www-106.ibm.com/developerworks/java/library/j-mer0827/ <br />"Matchmaking with Regular Expressions," Benedict Chng (JavaWorld, July 2001) explores regexes in the context of Apache''s Jakarta ORO library: <br />http://www.javaworld.com/javaworld/jw-07-2001/jw-0713-regex.html <br />"Regular Expressions and the Java Programming Language," Dana Nourie and Mike McCloskey (Sun Microsystems, August 2002) presents a brief overview of java.util.regex, including five illustrative regex-based applications: <br />http://developer.java.sun.com/developer/technicalArticles/releases/1.4regex/ <br />In "The Java Platform" (onJava.com), an excerpt from Chapter 4 of O''Reilly''s Java in a Nutshell, 4th Edition, David Flanagan presents short examples of CharSequence and java.util.regex methods: <br />http://www.onjava.com/pub/a/onjava/excerpt/javanut4_ch04 <br />The Java Tutorial''s "Regular Expressions" lesson teaches the basics of Sun''s java.util.regex package: <br />http://java.sun.com/docs/books/tutorial/extra/regex/index.html <br />Wikipedia defines some regex terminology, presents a brief history of regexes, and explores various regex syntaxes: <br />http://www.wikipedia.org/wiki/Regular_expression <br />Read Jeff''s previous Java 101 column: "Tools of the Trade, Part 3" (JavaWorld, January 2003): <br />http://www.javaworld.com/javaworld/jw-01-2003/jw-0103-java101.html? <br />Check out past Java 101 articles: <br />http://www.javaworld.com/javaworld/topicalindex/jw-ti-java101.html <br />Browse the Core Java section of JavaWorld''s Topical Index: <br />http://www.javaworld.com/channel_content/jw-core-index.shtml <br />Need some Java help? Visit our Java Beginner discussion: <br />http://forums.devworld.com/webx?50@@.ee6b804 <br />Java experts answer your toughest Java questions in JavaWorld''s Java Q&A column: <br />http://www.javaworld.com/javaworld/javaqa/javaqa-index.html <br />For Tips ''N Tricks, see: <br />http://www.javaworld.com/javaworld/javatips/jw-javatips.index.html <br />Sign up for JavaWorld''s free weekly Core Java email newsletter: <br />http://www.javaworld.com/subscribe <br />You''ll find a wealth of IT-related articles from our sister publications at IDG.net </font> </div> </div> <img src ="http://m.tkk7.com/wenlong/aggbug/76604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-10-22 10:36 <a href="http://m.tkk7.com/wenlong/articles/76604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>攉了一些js斚w的语法介l?/title><link>http://m.tkk7.com/wenlong/articles/76602.html</link><dc:creator>文龙</dc:creator><author>文龙</author><pubDate>Sun, 22 Oct 2006 02:30:00 GMT</pubDate><guid>http://m.tkk7.com/wenlong/articles/76602.html</guid><wfw:comment>http://m.tkk7.com/wenlong/comments/76602.html</wfw:comment><comments>http://m.tkk7.com/wenlong/articles/76602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/wenlong/comments/commentRss/76602.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/wenlong/services/trackbacks/76602.html</trackback:ping><description><![CDATA[ <h4 class="TextColor1" id="subjcns!83064727507EA7B6!150" style="MARGIN-BOTTOM: 0px">JavaScript语法——style.display 属?/h4> <div class="hx5jzdn" id="msgcns!83064727507EA7B6!150"> <div>语法Q?  <br />  <br />display   :   block   |   none   |   inline   |   compact   |   marker   |   inline-table   |   list-item   |   run-in   |   table   |table-caption   |   table-cell   |   table-column   |   table-column-group   |   table-footer-group   |   table-header-group   |   table-row   |   table-row-group   <br />  <br />参数Q?  <br />  <br />block   :    CSS1 块对象的默认倹{用该gؓ对象之后d新行   <br />none   :    CSS1 隐藏对象。与visibility属性的hiddeng同,其不隐藏的对象保留其物理I间   <br />inline   :    CSS1 内联对象的默认倹{用该值将从对象中删除?  <br />compact   :    CSS2 分配对象为块对象或基于内容之上的内联对象   <br />marker   :    CSS2 指定内容在容器对象之前或之后。要使用此参敎ͼ对象必须?after?before   伪元素一起?  <br />inline-table   :    CSS2 表格显CZؓ无前后换行的内联对象或内联容?  <br />list-item   :    CSS1 块对象指定为列表项目。ƈ可以d可选项目标?  <br />run-in   :    CSS2 分配对象为块对象或基于内容之上的内联对象   <br />table   :    CSS2 对象作为块元素U的表格昄   <br />table-caption   :    CSS2 对象作格标题显C?  <br />table-cell   :    CSS2 对象作格单元格昄   <br />table-column   :    CSS2 对象作格列昄   <br />table-column-group   :    CSS2 对象作格列l显C?  <br />table-header-group   :    CSS2 对象作格标题组昄   <br />table-footer-group   :    CSS2 对象作D注组昄   <br />table-row   :    CSS2 对象作D昄   <br />table-row-group   :    CSS2 对象作Dl显C?  <br />  <br />说明Q?  <br />  <br />讄或检索对象是否及如何昄?br />目前   IE5.5仅支持以上CSS1的参数?br /><h4 class="TextColor1" id="subjcns!83064727507EA7B6!149" style="MARGIN-BOTTOM: 0px">javascriptdXML</h4><div class="rj3xzhh" id="msgcns!83064727507EA7B6!149"><div><html><br /><br /><head><br /><br /><script language="JavaScript" for="window" event="onload"><br /><br />var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");<br /><br />xmlDoc.async="false";<br /><br />xmlDoc.load("hello.xml");<br /><br />nodes = xmlDoc.documentElement.childNodes;<br /><br />greeting.innerText = nodes.item(0).text;<br /><br /></script><br /><br /><title>First XSLT Example</title><br /><br /></head><br /><br /><body bgcolor="#FFFFFF"><br /><br /><span id="greeting"></span><br><br /><br /></body><br /><br /></html></div></div></div> </div> <img src ="http://m.tkk7.com/wenlong/aggbug/76602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/wenlong/" target="_blank">文龙</a> 2006-10-22 10:30 <a href="http://m.tkk7.com/wenlong/articles/76602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜集了一些有用信息!Q~~http://m.tkk7.com/wenlong/articles/76600.html文龙文龙Sun, 22 Oct 2006 02:20:00 GMThttp://m.tkk7.com/wenlong/articles/76600.htmlhttp://m.tkk7.com/wenlong/comments/76600.htmlhttp://m.tkk7.com/wenlong/articles/76600.html#Feedback0http://m.tkk7.com/wenlong/comments/commentRss/76600.htmlhttp://m.tkk7.com/wenlong/services/trackbacks/76600.html阅读全文

文龙 2006-10-22 10:20 发表评论
]]>
jsp分页http://m.tkk7.com/wenlong/articles/75882.html文龙文龙Wed, 18 Oct 2006 05:37:00 GMThttp://m.tkk7.com/wenlong/articles/75882.htmlhttp://m.tkk7.com/wenlong/comments/75882.htmlhttp://m.tkk7.com/wenlong/articles/75882.html#Feedback0http://m.tkk7.com/wenlong/comments/commentRss/75882.htmlhttp://m.tkk7.com/wenlong/services/trackbacks/75882.html希望最新的U录在开头给你的表徏立查询:
表:mytable
查询Qcreate or replace view as mytable_view from mytable order by id desc 其中Q最好用序列号create sequence mytable_sequence 来自动增加你的纪录id?

?源程?
<%String sConn="你的q接"
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection(sConn,"你的用户?,"密码");
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENS99vIVE,ResultSet.CONCUR_UPDATABLE);
Statement stmtcount=conn.createStatement(ResultSet.TYPE_SCROLL_SENS99vIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs=stmt.executeQuery("select * from mytable_view");
String sqlcount="select count(*) from mytable_view";
ResultSet rscount=stmtcount.executeQuery(sqlcount);

int pageSize=你的每页昄U录敎ͼ
int rowCount=0; //ȝ记录?
while (rscount
int pageCount; //ȝ|
int currPage; //当前|

1


String strPage;
strPage=request.getParameter("page");
if (strPage==null){
currPage=1;
}
else{
currPage=Integer.parseInt(strPage);
if (currPage<1) currPage=1;
}
pageCount=(rowCount+pageSize-1)/pageSize;
if (currPage>pageCount) currPage=pageCount;

int thepage=(currPage-1)*pageSize;
int n=0;
rs.absolute(thepage+1);
while (n<(pageSize)&&!rs
%>
<%rs.close();
rscount.close();
stmt.close();
stmtcount.close();
conn.close();
%>

//下面?W几늭
<form name="sinfo" method="post" action="sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>" onSubmit="return testform(this)">
W?lt;%=currPage%>??lt;%=pageCount%>??lt;%=rowCount%>?
<%if(currPage>1){%><a href="sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>">首页</a><%}%>
<%if(currPage>1){%><a href="sbinfo_index.jsp?page=<%=currPage-1%>&condition=<%=condition%>&type=<%=type%>">上一?lt;/a><%}%>
<%if(currPage<pageCount){%><a href="sbinfo_index.jsp?page=<%=currPage+1%>&condition=<%=condition%>&type=<%=type%>">下一?lt;/a><%}%>
<%if(pageCount>1){%><a href="sbinfo_index.jsp?page=<%=pageCount%>&condition=<%=condition%>&type=<%=type%>">N</a><%}%>
跛_<input type="text" name="page" size="4" style="font-size:9px">?
<input type="submit" name="submit" size="4" value="GO" style="font-size:9px">
</form>



文龙 2006-10-18 13:37 发表评论
]]>
վ֩ģ壺 ۺ| պ˳| ɫѹۿ| ޹˾þۺһ77| ޹˾þۺ| ձڵƵӰ| ŷavۺɫ| պһѹۿ| AVպAVһ| ҰһƵ| ѵĻɫվ| ƷƵ߹ۿ | ޻ɫվ| 999߾ƷѲ| ɫ͵͵͵վɫ͵һ| ŮҹëƬѿ| ޾Ʒ߹ۿ| һػɫƬ߹ۿ| һAëƬѹۿþþƷ| ޾ƷҹҹҹŮ| 2019ĻƵ| һ245699| ԸŮƵվҹ | ˳ɫ77777| Ļ| ޾Ʒһۺ99þ| www.޾Ʒ.com| þ99Ʒѿ| һ岻| Ļһ| ˿Ƶ2019| ѹ߾Ʒһ| þ޾ƷĻ| ۲Ƶѹۿ| ƷŮٸaѾþ| ޳˸վ| ߲Ƶ| һƵ| һ| ޹Ʒþҹ| ۺ|