锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久亚洲不卡动漫,996久久国产精品线观看,久久国产亚洲精品麻豆http://www.shnenglu.com/aqazero/category/3167.htmlzh-cnWed, 27 Aug 2008 05:12:20 GMTWed, 27 Aug 2008 05:12:20 GMT60妗冩潕涓嶈█錛屼笅鑷垚韞?/title><link>http://www.shnenglu.com/aqazero/archive/2008/08/27/60134.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 27 Aug 2008 04:01:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2008/08/27/60134.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/60134.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2008/08/27/60134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/60134.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/60134.html</trackback:ping><description><![CDATA[鏈変釜鎺т歡鍙獵TreeListCtrl錛屾垜鐢ㄤ簡濂戒箙浜嗭紝鏆楃埥浜嗗緢涔咃紝鏈浣滆呮槸瓚婃潵瓚婃暚浠板晩<br><br>鏈榪戞棤鎰忎腑鍙戠幇錛屼綔鑰匱igerX鍘熸潵緋誨湴鐞冩潙涓浗閾訛紝嬈ц躲?br>鍦板潃錛歨ttp://www.codeproject.com/KB/tree/ctreelistctrl.aspx<br><br>榪樹互涓篶odeproject涓婃病鍏跺畠涓浗鍦熶漢鍛紝鍗庝漢鍊掓槸鐭ラ亾鏈夊ソ鍑犱釜銆?br><br>淇轟篃鍦╟odeproject鍙戜簡綃囨枃绔狅紝璁瞲ml搴忓垪鍖栧鏉傚璞℃ā鍨嬬殑錛岄棬鍙綏闆鍟娿?br>http://www.codeproject.com/KB/cs/xmlable.aspx<br><br>鍡紝寰堟湁宸埆銆?br><br> <img src ="http://www.shnenglu.com/aqazero/aggbug/60134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2008-08-27 12:01 <a href="http://www.shnenglu.com/aqazero/archive/2008/08/27/60134.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>coding hall of shamehttp://www.shnenglu.com/aqazero/archive/2008/08/15/58947.htmlbrentbrentFri, 15 Aug 2008 08:55:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/08/15/58947.htmlhttp://www.shnenglu.com/aqazero/comments/58947.htmlhttp://www.shnenglu.com/aqazero/archive/2008/08/15/58947.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/58947.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/58947.htmlAlthough recently I was working on an embedded system, and saw revision dates going back more than ten years. I was quite surprised at how well-structured and commented the code was. Very easy to modify. One of my co-workers told me that was mainly because of the team leader, who held regular code walk-thrus, and kept a "coding hall of shame" on an internal web site.

brent 2008-08-15 16:55 鍙戣〃璇勮
]]>
Platform Warshttp://www.shnenglu.com/aqazero/archive/2008/05/14/49817.htmlbrentbrentWed, 14 May 2008 06:10:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/05/14/49817.htmlhttp://www.shnenglu.com/aqazero/comments/49817.htmlhttp://www.shnenglu.com/aqazero/archive/2008/05/14/49817.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/49817.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/49817.html

brent 2008-05-14 14:10 鍙戣〃璇勮
]]>
杞歡瑙傚康闈╁懡:浜や簰璁捐綺鵑珦http://www.shnenglu.com/aqazero/archive/2008/04/29/48426.htmlbrentbrentTue, 29 Apr 2008 06:19:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/04/29/48426.htmlhttp://www.shnenglu.com/aqazero/comments/48426.htmlhttp://www.shnenglu.com/aqazero/archive/2008/04/29/48426.html#Feedback1http://www.shnenglu.com/aqazero/comments/commentRss/48426.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/48426.html

brent 2008-04-29 14:19 鍙戣〃璇勮
]]>
msdn code; visualwebguihttp://www.shnenglu.com/aqazero/archive/2008/04/02/46006.htmlbrentbrentWed, 02 Apr 2008 03:05:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/04/02/46006.htmlhttp://www.shnenglu.com/aqazero/comments/46006.htmlhttp://www.shnenglu.com/aqazero/archive/2008/04/02/46006.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/46006.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/46006.html
http://www.visualwebgui.com/
how did they do that?


brent 2008-04-02 11:05 鍙戣〃璇勮
]]>
book notehttp://www.shnenglu.com/aqazero/archive/2008/03/28/45607.htmlbrentbrentFri, 28 Mar 2008 02:53:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/03/28/45607.htmlhttp://www.shnenglu.com/aqazero/comments/45607.htmlhttp://www.shnenglu.com/aqazero/archive/2008/03/28/45607.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/45607.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/45607.htmlhttp://www.china-pub.com/37008
鐪嬩簡鏍風珷錛屾病瑙夊緱鍝噷浣撶幇浜?#8220;楂樻晥”2瀛楋紝鍙槸浠栨帓閿欑殑鐜瀹炲湪鏄伓鍔o紝鍏跺疄嫻嬭瘯浜哄憳搴旇姣斿紑鍙戜漢鍛樼墰閫兼墠瀵癸紝浠g爜浜轟漢浼氬啓錛屾帓閿欎笉鏄漢浜鴻兘鍋氱殑錛岄渶瑕佺殑鐭ヨ瘑鍌ㄥ姣斿厜鍐欏啓浠g爜闇瑕佺殑澶氬緱澶氫簡銆?br>鏍風珷閲屼婦鐨勫伐浜哄垎閲戞潯鐨勪緥瀛愰鐩槸閿欑殑錛岃繕鐪嬪埌涓涓敊鍒瓧...浣嗕亢瀵硅繖縐嶆巿浜轟互娓旂殑鍐欐硶寰堟湁濂芥劅銆?br>

brent 2008-03-28 10:53 鍙戣〃璇勮
]]>
numerical computationhttp://www.shnenglu.com/aqazero/archive/2008/03/17/44693.htmlbrentbrentMon, 17 Mar 2008 07:39:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/03/17/44693.htmlhttp://www.shnenglu.com/aqazero/comments/44693.htmlhttp://www.shnenglu.com/aqazero/archive/2008/03/17/44693.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/44693.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/44693.htmlhttp://www.scilab.org/



brent 2008-03-17 15:39 鍙戣〃璇勮
]]>
SQLite; .Net<- InterProcess ->MFC; Windows Services in Action; a 2D CAD application;http://www.shnenglu.com/aqazero/archive/2008/03/05/43726.htmlbrentbrentWed, 05 Mar 2008 02:22:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/03/05/43726.htmlhttp://www.shnenglu.com/aqazero/comments/43726.htmlhttp://www.shnenglu.com/aqazero/archive/2008/03/05/43726.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/43726.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/43726.htmlSQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.
http://www.sqlite.org/
Light, Free, Fast, Cross platform.
witten in C, and there are a lot of wrappers, find what you need here: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

http://www.codeproject.com/KB/cpp/SQLite_Server.aspx
Implementing Server/Client architecture for that great SQLite! with visual studio C++ 2005

http://www.codeproject.com/KB/cs/InterprocessCommunicator.aspx
Interprocess Communication Between .NET and MFC using WM_COPYDATA

http://www.codeproject.com/KB/cs/WindowsServicesInAction1.aspx
http://www.codeproject.com/KB/cs/WindowsServicesInAction2.aspx
Windows Services in Action
Windows Services Hand by Hand...

http://www.codeproject.com/KB/cs/OpenS-CAD.aspx
OpenS-CAD, a simple 2D CAD application. <-- just so so

http://www.codeproject.com/KB/cs/DiskAnalyzer.aspx
I don't care about disk, i do care about the pie chart and tree gird view.










brent 2008-03-05 10:22 鍙戣〃璇勮
]]>
firefoxhttp://www.shnenglu.com/aqazero/archive/2008/02/04/42517.htmlbrentbrentMon, 04 Feb 2008 06:51:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/02/04/42517.htmlhttp://www.shnenglu.com/aqazero/comments/42517.htmlhttp://www.shnenglu.com/aqazero/archive/2008/02/04/42517.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/42517.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/42517.html2)http://cs.senecac.on.ca/~david.humphrey/writing/debugging-firefox.html




brent 2008-02-04 14:51 鍙戣〃璇勮
]]>
ui patternshttp://www.shnenglu.com/aqazero/archive/2008/02/01/42341.htmlbrentbrentFri, 01 Feb 2008 06:24:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/02/01/42341.htmlhttp://www.shnenglu.com/aqazero/comments/42341.htmlhttp://www.shnenglu.com/aqazero/archive/2008/02/01/42341.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/42341.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/42341.html

brent 2008-02-01 14:24 鍙戣〃璇勮
]]>
HTML document in vc6.0http://www.shnenglu.com/aqazero/archive/2007/09/07/31747.htmlbrentbrentFri, 07 Sep 2007 06:00:00 GMThttp://www.shnenglu.com/aqazero/archive/2007/09/07/31747.htmlhttp://www.shnenglu.com/aqazero/comments/31747.htmlhttp://www.shnenglu.com/aqazero/archive/2007/09/07/31747.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/31747.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/31747.htmlsimple way to capture whole html as an image


http://codeguru.earthweb.com/cpp/i-n/ieprogram/displayinginformation/article.php/c7273/
HTML Editor for VC++ 6.0



brent 2007-09-07 14:00 鍙戣〃璇勮
]]>
gpc urlhttp://www.shnenglu.com/aqazero/archive/2007/08/20/30442.htmlbrentbrentMon, 20 Aug 2007 09:29:00 GMThttp://www.shnenglu.com/aqazero/archive/2007/08/20/30442.htmlhttp://www.shnenglu.com/aqazero/comments/30442.htmlhttp://www.shnenglu.com/aqazero/archive/2007/08/20/30442.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/30442.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/30442.html
http://www.cs.man.ac.uk/~toby/alan/software/



brent 2007-08-20 17:29 鍙戣〃璇勮
]]>
reading note 2006-12http://www.shnenglu.com/aqazero/archive/2006/12/03/15910.htmlbrentbrentSat, 02 Dec 2006 16:28:00 GMThttp://www.shnenglu.com/aqazero/archive/2006/12/03/15910.htmlhttp://www.shnenglu.com/aqazero/comments/15910.htmlhttp://www.shnenglu.com/aqazero/archive/2006/12/03/15910.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/15910.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/15910.html 濡備綍鑾峰彇姹夊瓧鐨勬嫾闊?
http://blog.csdn.net/cpu88/archive/2004/11/26/195315.aspx
姝ラ錛?
//寰楀埌鎷奸煶錛堝寘鎷闊籌級
聽A:聽聽 鐢ㄨ緭鍏ユ硶鐢熸垚鍣?win2000)"C:\Program Files\Windows NT\Accessories\Imegen.exe"
聽聽聽聽聽聽 閫嗚漿鎹㈡嫾闊寵緭鍏ユ硶鏂囦歡C:\WINNT\SYSTEM32\WINPY.MB
聽聽聽聽聽 浼氱敓鎴愪竴涓狢:\WINNT\SYSTEM32\WINPY.txt鏂囦歡(綆縐?WINPY.txt鏂囦歡)
B:聽聽 WINPY.txt鏂囦歡閲岄潰鏄犅犅?姹夊瓧鎷奸煶鍒楄〃5涓囧鏉?闄ゅ幓璇嶇粍 鏈夋眽瀛?涓囧涓紙鍚闊籌級
C:聽聽 姹夊瓧鍙互杞崲鎴愭煇涓紪鐮佸彲浠ヨ嚜宸辨瀯閫犵紪鐮佹柟娉?淇濊瘉涓涓眽瀛楀搴斾竴涓紪鐮?綆縐扮紪鐮佹柟娉曪級
聽聽聽聽聽 濡?byte[] uniCode = new String(temp).getBytes(鈥淕B2312鈥?;
聽聽聽聽聽 灝哤INPY.txt閲岄潰鎵鏈夌殑姹夊瓧鍙樻垚緙栫爜銆傚緱鍒版眽瀛楃紪鐮?鎷奸煶瀵瑰簲琛紙綆縐版眽瀛楃紪鐮佽〃錛?br />聽聽聽聽聽聽聽 XXXX0,a聽聽聽 //XXXX0鏄煇涓眽瀛楃殑緙栫爜
聽聽聽聽聽聽聽 XXYX2,o聽聽聽 //XXYX2鏄煇涓眽瀛楃殑緙栫爜
聽D:聽 姹夊瓧緙栫爜琛ㄦ寜緙栫爜鎺掑簭錛岀紪鐮佽〃鎸夌紪鐮佸ぇ灝忔帓搴忋?br />聽聽聽聽聽 緙栫爜琛ㄥ垎緇勶紙鏂逛究鏌ヨ 錛?鑰屼笖寰楀埌鍒嗙粍鐨勬爣蹇椼?br />聽E: 鏌ヨ姹夊瓧鎷奸煶聽 灝嗘眽瀛楄繘琛岀紪鐮侊紙鎸夎嚜宸辯殑緙栫爜鏂規硶錛夈?br />聽聽聽聽聽 鐢ㄧ紪鐮佸湪緙栫爜琛ㄤ腑鏌ヨ灝卞彲浠ュ緱鍒版嫾闊籌紝鏌ヨ鏃跺湪緙栫爜琛ㄤ腑鐨勬煇涓垎緇勪腑鏌ヨ錛岃屼笉鏄湪鎵鏈夌紪鐮佷腑鏌ヨ銆傞熷害寰堝揩銆?br />//寰楀埌棣栧瓧絎?濡?鍖椾含'聽 寰楀埌 'bj'聽聽聽聽聽聽聽聽聽聽聽 '鍛嗗瓙'寰楀埌聽 'd[a]z '聽 //澶氶煶
//鎺掑簭聽 鏈変簡鎷奸煶 灝卞彲浠ユ寜涓浜涘父瑙佺殑鎺掑簭鏂規硶鎺掑簭

濡備綍鍦–++涓泦鎴怢ua鑴氭湰(LuaPlus綃?:
http://ly4cn.teeta.com/blog/data/44939.html
鎹鏃犳硶璋冪敤铏氬嚱鏁般傛湁鐐規檿銆傛湁絀哄啀鐪嬬湅銆?br />http://luaplus.org/

瀛楃涓插埌鍏朵粬鏍煎紡鐨勮漿鎹?
CString 聽 timestr 聽 = 聽 "2000騫?4鏈?5鏃?; 聽
聽 int 聽 a,b,c 聽 ; 聽
聽 sscanf(timestr.GetBuffer(timestr.GetLength()),"%d騫?d鏈?d鏃?,&a,&b,&c); 聽
聽 CTime 聽 time(a,b,c,0,0,0);聽聽
ANSI鍏煎錛屾垜澶闄嬪闂諱簡...

RMI for c++?:
http://www.codeproject.com/threads/RMI_For_Cpp.asp
鍙嶆鐩墠娌¤繖涓渶瑕併?br />
澹伴煶寮曟搸錛宎udiere錛屾敮鎸佽法騫沖彴:
浼間箮鎸轟笉閿欍?br />http://www.shnenglu.com/gogoplayer/archive/2006/11/29/15763.html
http://sourceforge.net/projects/audiere/
wxWidget鐨剋xSound鏀寔windows鍜寀nix銆?br />鍏跺畠鍏充簬sound:
http://www.opensound.com/oss.html
http://www.libsdl.org/

Why You Should Turn Down That Job Offer
http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9005602&pageNumber=1
You will be the fifth person to have held the job in the past three years.
Why is this job vacant?
Is the turnover rate high for this position?
What's typically the next career step for those with this job?
You will clash with the corporate culture.
You will be bored -- or overwhelmed -- in the role.
You will not be able to move forward.

may not be reason enough to turn down a job:
You will earn less than you did before.
You will be in the car for two hours each day.
You will receive a 鈥渄emotion鈥?in title.

璁$畻Int鏈澶ф渶灝忓?br />http://www.shnenglu.com/Winux32/archive/2006/12/01/15853.html
閫氬父鎴戜滑浼氫嬌鐢–RT鎻愪緵緇欐垜浠殑涓涓ご鏂囦歡<limits.h>涓瀹氫箟瀹廔NT_MAX, INT_MIN, UINT_MAX鏉ュ畾涔塱nt鐨勬渶澶ф渶灝忓間笅杈圭粰鍑虹敱璁$畻寰楀嚭榪欎簺鍊肩殑鏂規硶錛屽叾浠栨暟鎹被鍨嬪悓鐞?br />unsigned聽 int聽 GetUnsignedIntMax()
{
聽聽聽聽 return聽聽 ~ 0 ;
}

signed聽 int聽 GetSignedIntMax()
{
聽聽聽聽 return聽 (static_cast < unsigned聽 int > ( ~ 0 ))聽 >>聽聽 1 ;
}

signed聽 int聽 GetSignedIntMin()
{
聽聽聽 signed聽 int聽 i聽 =聽聽 - 1 ;
聽聽聽 if聽 (i聽 &聽聽 1 )
聽聽聽 聽聽聽 return聽聽 - ( (static_cast < unsigned聽 int > ( ~ 0 ))聽 >>聽聽 1聽 )聽 -聽聽 1 ;
聽聽聽 else
聽聽聽 聽聽聽 return聽聽 - ( (static_cast < unsigned聽 int > ( ~ 0 ))聽 >>聽聽 1聽 );
}
紼嶅井瑙i噴涓涓嬶紝鍓嶄袱涓病鏈変粈涔堝ソ璇寸殑錛屾渶鍚庝竴涓鑰冭檻鏄痶wo complement榪樻槸one complement
濡傛灉鏄墠鑰咃紝鏈夎繖鏍蜂竴涓綆楀叕寮忥紝~X + 1= -X錛屽嵆涓涓暟鍙栧弽鍔犱竴琛ㄧず榪欎釜鏁版墍瀵瑰簲鐨勮礋鏁?br />

How Skype & Co. get round firewalls
cool..
http://www.heise-security.co.uk/articles/82481
鍏圕opy榪囨潵鍐嶈.

The hole trick

How Skype & Co. get round firewalls

Peer-to-peer software applications are a network administrator's nightmare. In order to be able to exchange packets with their counterpart as directly as possible they use subtle tricks to punch holes in firewalls, which shouldn't actually be letting in packets from the outside world.

Increasingly, computers are positioned behind firewalls to protect systems from internet threats. Ideally, the firewall function will be performed by a router, which also translates the PC's local network address to the public IP address (Network Address Translation, or NAT). This means an attacker cannot directly adress the PC from the outside - connections have to be established from the inside.

This is of course a problem when two computers behind NAT firewalls require to talk directly to each other - if, for example, their users want to call each other using Voice over IP (VoIP). The dilemma is clear - whichever party calls the other, the recipient's firewall will decline the apparent attack and will simply discard the data packets. The telephone call doesn't happen. Or at least that's what a network administrator would expect.

Punched

But anyone who has used the popular internet telephony software Skype knows that it works as smoothly behind a NAT firewall as it does if the PC is connected directly to the internet. The reason for this is that the inventors of Skype and similar software have come up with a solution.

Naturally every firewall must also let packets through into the local network - after all the user wants to view websites, read e-mails, etc. The firewall must therefore forward the relevant data packets from outside, to the workstation computer on the LAN. However it only does so, when it is convinced that a packet represents the response to an outgoing data packet. A NAT router therefore keeps tables of which internal computer has communicated with which external computer and which ports the two have used.

The trick used by VoIP software consists of persuading the firewall that a connection has been established, to which it should allocate subsequent incoming data packets. The fact that audio data for VoIP is sent using the connectionless UDP protocol acts to Skype's advantage. In contrast to TCP, which includes additional connection information in each packet, with UDP, a firewall sees only the addresses and ports of the source and destination systems. If, for an incoming UDP packet, these match an NAT table entry, it will pass the packet on to an internal computer with a clear conscience.

Switching

The switching server, with which both ends of a call are in constant contact, plays an important role when establishing a connection using Skype. This occurs via a TCP connection, which the clients themselves establish. The Skype server therefore always knows under what address a Skype user is currently available on the internet. Where possible the actual telephone connections do not run via the Skype server; rather, the clients exchange data directly.

Let's assume that Alice wants to call her friend Bob. Her Skype client tells the Skype server that she wants to do so. The Skype server already knows a bit about Alice. From the incoming query it sees that Alice is currently registered at the IP address 1.1.1.1 and a quick test reveals that her audio data always comes from UDP port 1414. The Skype server passes this information on to Bob's Skype client, which, according to its database, is currently registered at the IP address 2.2.2.2 and which, by preference uses UDP port 2828.

Bob's Skype program then punches a hole in its own network firewall: It sends a UDP packet to 1.1.1.1 port 1414. This is discarded by Alice's firewall, but Bob's firewall doesn't know that. It now thinks that anything which comes from 1.1.1.1 port 1414 and is addressed to Bob's IP address 2.2.2.2 and port 2828 is legitimate - it must be the response to the query which has just been sent.

Now the Skype server passes Bob's coordinates on to Alice, whose Skype application attempts to contact Bob at 2.2.2.2:2828. Bob's firewall sees the recognised sender address and passes the apparent response on to Bob's PC - and his Skype phone rings.

Doing the rounds

This description is of course somewhat simplified - the details depend on the specific properties of the firewalls used. But it corresponds in principle to our observations of the process of establishing a connection between two Skype clients, each of which was behind a Linux firewall. The firewalls were configured with NAT for a LAN and permitted outgoing UDP traffic.

Linux' NAT functions have the VoIP friendly property of, at least initially, not changing the ports of outgoing packets. The NAT router merely replaces the private, local IP address with its own address - the UDP source port selected by Skype is retained. Only when multiple clients on the local network use the same source port does the NAT router stick its oar in and reset the port to a previously unused value. This is because each set of two IP addresses and ports must be able to be unambiguously assigned to a connection between two computers at all times. The router will subsequently have to reconstruct the internal IP address of the original sender from the response packet's destination port.

Other NAT routers will try to assign ports in a specific range, for example ports from 30,000 onwards, and translate UDP port 1414, if possible, to 31414. This is, of course, no problem for Skype - the procedure described above continues to work in a similar manner without limitations.

It becomes a little more complicated if a firewall simply assigns ports in sequence, like Check Point's FireWall-1: the first connection is assigned 30001, the next 30002, etc. The Skype server knows that Bob is talking to it from port 31234, but the connection to Alice will run via a different port. But even here Skype is able to outwit the firewall. It simply runs through the ports above 31234 in sequence, hoping at some point to stumble on the right one. But if this doesn't work first go, Skype doesn't give up. Bob's Skype opens a new connection to the Skype server, the source port of which is then used for a further sequence of probes.

Nevertheless, in very active networks Alice may not find the correct, open port. The same also applies for a particular type of firewall, which assigns every new connection to a random source port. The Skype server is then unable to tell Alice where to look for a suitable hole in Bob's firewall.

However, even then, Skype doesn't give up. In such cases a Skype server is then used as a relay. It accepts incoming connections from both Alice and Bob and relays the packets onwards. This solution is always possible, as long as the firewall permits outgoing UDP traffic. It involves, however, an additional load on the infrastructure, because all audio data has to run through Skype's servers. The extended packet transmission times can also result in an unpleasant delay.

Use of the procedure described above is not limited to Skype and is known as "UDP hole punching". Other network services such as the Hamachi gaming VPN application, which relies on peer-to-peer communication between computers behind firewalls, use similar procedures. A more developed form has even made it to the rank of a standard - RFC 3489 "Simple Traversal of UDP through NAT" (STUN) describes a protocol which with two STUN clients can get around the restrictions of NAT with the help of a STUN server in many cases. The draft Traversal Using Relay NAT (TURN) protocol describes a possible standard for relay servers.

DIY hole punching

With a few small utilities, you can try out UDP hole punching for yourself. The tools required, hping2 and netcat, can be found in most Linux distributions. Local is a computer behind a Linux firewall (local-fw) with a stateful firewall which only permits outgoing (UDP) connections. For simplicity, in our test the test computer remote was connected directly to the internet with no firewall.

Firstly start a UDP listener on UDP port 14141 on the local/1 console behind the firewall:

local/1# nc -u -l -p 14141

An external computer "remote" then attempts to contact it.

remote# echo "hello" | nc -p 53 -u local-fw 14141

However, as expected nothing is received on local/1 and, thanks to the firewall, nothing is returned to remote. Now on a second console, local/2, hping2, our universal tool for generating IP packets, punches a hole in the firewall:

local/2# hping2 -c 1 -2 -s 14141 -p 53 remote

As long as remote is behaving itself, it will send back a "port unreachable" response via ICMP - however this is of no consequence. On the second attempt

remote# echo "hello" | nc -p 53 -u local-fw 14141

the netcat listener on console local/1 then coughs up a "hello" - the UDP packet from outside has passed through the firewall and arrived at the computer behind it.

Network administrators who do not appreciate this sort of hole in their firewall and are worried about abuse, are left with only one option - they have to block outgoing UDP traffic, or limit it to essential individual cases. UDP is not required for normal internet communication anyway - the web, e-mail and suchlike all use TCP. Streaming protocols may, however, encounter problems, as they often use UDP because of the reduced overhead.

Astonishingly, hole punching also works with TCP. After an outgoing SYN packet the firewall / NAT router will forward incoming packets with suitable IP addresses and ports to the LAN even if they fail to confirm, or confirm the wrong sequence number (ACK). Linux firewalls at least, clearly fail to evaluate this information consistently. Establishing a TCP connection in this way is, however, not quite so simple, because Alice does not have the sequence number sent in Bob's first packet. The packet containing this information was discarded by her firewall.

HashCode鎺ㄨ崘綆楁硶
銆奅ffective Java銆?br />1,int result = 17;
2,瀵規瘡涓噸瑕佹暟鎹垚鍛?Equals涓敤鍒扮殑)錛岃綆梚nt c:
boolean : c = f?0:1;
byte,int,char,short : c = (int)f
long c = (int)(f^(f>>>32));
float : c = Float.floatToIntBits(f);
double : long l = (int)(f^(f>>>32));c = (int)(l^(l>>>32));
鍏跺畠reference : c = f.hashCode();
3,result = 37*result+c;

姝e垯琛ㄨ揪寮忚娉?br />緲婚亶浜哅SDN2002涓叧浜庢鍒欒〃杈懼紡鐨勬枃绔狅紝灞呯劧鎵句笉鍒版鍒欒〃杈懼紡璇硶錛屾皵姝繪垜浜嗐?br />璐磋繃鏉ャ傝漿杞借嚜鏌愪漢鐨勮漿杞界殑杞澆鐨勮漿杞?...

銆銆姝e垯琛ㄨ揪寮?regular expression)鎻忚堪浜嗕竴縐嶅瓧絎︿覆鍖歸厤鐨勬ā寮忥紝鍙互鐢ㄦ潵媯鏌ヤ竴涓覆鏄惁鍚湁鏌愮瀛愪覆銆佸皢鍖歸厤鐨勫瓙涓插仛鏇挎崲鎴栬呬粠鏌愪釜涓蹭腑鍙栧嚭絎﹀悎鏌愪釜鏉′歡鐨勫瓙涓茬瓑銆?br /> 銆銆鍒楃洰褰曟椂錛屻dir *.txt鎴杔s *.txt涓殑*.txt灝?ins>涓?/ins>鏄竴涓鍒欒〃杈懼紡,鍥犱負榪欓噷*涓庢鍒欏紡鐨?鐨勫惈涔夋槸涓嶅悓鐨勩?

銆銆涓轟究浜庣悊瑙e拰璁板繂錛屽厛浠庝竴浜涙蹇靛叆鎵嬶紝鎵鏈夌壒孌婂瓧絎︽垨瀛楃緇勫悎鏈変竴涓昏〃鍦ㄥ悗闈紝鏈鍚庝竴浜涗緥瀛愪緵鐞嗚В鐩稿簲鐨勬蹇點?/p>

姝e垯琛ㄨ揪寮?/h3>
銆銆鏄敱鏅氬瓧絎︼紙渚嬪瀛楃 a 鍒?z錛変互鍙婄壒孌婂瓧絎︼紙縐頒負鍏冨瓧絎︼級緇勬垚鐨勬枃瀛楁ā寮忋傛鍒欒〃杈懼紡浣滀負涓涓ā鏉匡紝灝嗘煇涓瓧絎︽ā寮忎笌鎵鎼滅儲鐨勫瓧絎︿覆榪涜鍖歸厤銆?br /> 銆銆鍙互閫氳繃鍦ㄤ竴瀵瑰垎闅旂涔嬮棿鏀懼叆琛ㄨ揪寮忔ā寮忕殑鍚勭緇勪歡鏉ユ瀯閫犱竴涓鍒欒〃杈懼紡錛屽嵆/expression/

鏅氬瓧絎?/h3>
銆銆鐢辨墍鏈夐偅浜涙湭鏄懼紡鎸囧畾涓哄厓瀛楃鐨勬墦鍗板拰闈炴墦鍗板瓧絎︾粍鎴愩傝繖鍖呮嫭鎵鏈夌殑澶у啓鍜屽皬鍐欏瓧姣嶅瓧絎︼紝鎵鏈夋暟瀛楋紝鎵鏈夋爣鐐圭鍙蜂互鍙婁竴浜涚鍙楓?

闈炴墦鍗板瓧絎?/h3>
瀛楃 鍚箟
\cx 鍖歸厤鐢眡鎸囨槑鐨勬帶鍒跺瓧絎︺備緥濡傦紝 \cM 鍖歸厤涓涓?Control-M 鎴栧洖杞︾銆倄 鐨勫煎繀欏諱負 A-Z 鎴?a-z 涔嬩竴銆傚惁鍒欙紝灝?c 瑙嗕負涓涓師涔夌殑 'c' 瀛楃銆?/td>
\f 鍖歸厤涓涓崲欏電銆傜瓑浠蜂簬 \x0c 鍜?\cL銆?/td>
\n 鍖歸厤涓涓崲琛岀銆傜瓑浠蜂簬 \x0a 鍜?\cJ銆?/td>
\r 鍖歸厤涓涓洖杞︾銆傜瓑浠蜂簬 \x0d 鍜?\cM銆?/td>
\s 鍖歸厤浠諱綍絀虹櫧瀛楃錛屽寘鎷┖鏍箋佸埗琛ㄧ銆佹崲欏電絳夌瓑銆傜瓑浠蜂簬 [ \f\n\r\t\v]銆?/td>
\S 鍖歸厤浠諱綍闈炵┖鐧藉瓧絎︺傜瓑浠蜂簬 [^ \f\n\r\t\v]銆?/td>
\t 鍖歸厤涓涓埗琛ㄧ銆傜瓑浠蜂簬 \x09 鍜?\cI銆?/td>
\v 鍖歸厤涓涓瀭鐩村埗琛ㄧ銆傜瓑浠蜂簬 \x0b 鍜?\cK銆?/td>

鐗規畩瀛楃


銆銆鎵璋撶壒孌婂瓧絎︼紝灝辨槸涓浜涙湁鐗規畩鍚箟鐨勫瓧絎︼紝濡備笂闈㈣鐨?*.txt"涓殑*錛岀畝鍗曠殑璇村氨鏄〃紺轟換浣曞瓧絎︿覆鐨勬剰鎬濄傚鏋滆鏌ユ壘鏂囦歡鍚嶄腑鏈夛紛鐨勬枃浠訛紝鍒欓渶瑕佸錛婅繘琛岃漿涔夛紝鍗沖湪鍏跺墠鍔犱竴涓猏銆俵s \*.txt銆傛鍒欒〃杈懼紡鏈変互涓嬬壒孌婂瓧絎︺?br />
鐗瑰埆瀛楃璇存槑
$鍖歸厤杈撳叆瀛楃涓茬殑緇撳熬浣嶇疆銆傚鏋滆緗簡 RegExp 瀵硅薄鐨?Multiline 灞炴э紝鍒?$ 涔熷尮閰?'\n' 鎴?'\r'銆傝鍖歸厤 $ 瀛楃鏈韓錛岃浣跨敤 \$銆?/td>
( )鏍囪涓涓瓙琛ㄨ揪寮忕殑寮濮嬪拰緇撴潫浣嶇疆銆傚瓙琛ㄨ揪寮忓彲浠ヨ幏鍙栦緵浠ュ悗浣跨敤銆傝鍖歸厤榪欎簺瀛楃錛岃浣跨敤 \( 鍜?\)銆?/td>
*鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨澶氭銆傝鍖歸厤 * 瀛楃錛岃浣跨敤 \*銆?/td>
+鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忎竴嬈℃垨澶氭銆傝鍖歸厤 + 瀛楃錛岃浣跨敤 \+銆?/td>
.鍖歸厤闄ゆ崲琛岀 \n涔嬪鐨勪換浣曞崟瀛楃銆傝鍖歸厤 .錛岃浣跨敤 \銆?/td>
[ 鏍囪涓涓腑鎷彿琛ㄨ揪寮忕殑寮濮嬨傝鍖歸厤 [錛岃浣跨敤 \[銆?/td>
?鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨涓嬈★紝鎴栨寚鏄庝竴涓潪璐┆闄愬畾絎︺傝鍖歸厤 ? 瀛楃錛岃浣跨敤 \?銆?/td>
\
^鍖歸厤杈撳叆瀛楃涓茬殑寮濮嬩綅緗紝闄ら潪鍦ㄦ柟鎷彿琛ㄨ揪寮忎腑浣跨敤錛屾鏃跺畠琛ㄧず涓嶆帴鍙楄瀛楃闆嗗悎銆傝鍖歸厤 ^ 瀛楃鏈韓錛岃浣跨敤 \^銆?/td>
{鏍囪闄愬畾絎﹁〃杈懼紡鐨勫紑濮嬨傝鍖歸厤 {錛岃浣跨敤 \{銆?/td>
|鎸囨槑涓ら」涔嬮棿鐨勪竴涓夋嫨銆傝鍖歸厤 |錛岃浣跨敤 \|銆?/td>


銆銆鏋勯犳鍒欒〃杈懼紡鐨勬柟娉曞拰鍒涘緩鏁板琛ㄨ揪寮忕殑鏂規硶涓鏍楓備篃灝辨槸鐢ㄥ縐嶅厓瀛楃涓庢搷浣滅灝嗗皬鐨勮〃杈懼紡緇撳悎鍦ㄤ竴璧鋒潵鍒涘緩鏇村ぇ鐨勮〃杈懼紡銆傛鍒欒〃杈懼紡鐨勭粍浠跺彲浠ユ槸鍗曚釜鐨勫瓧絎︺佸瓧絎﹂泦鍚堛佸瓧絎﹁寖鍥淬佸瓧絎﹂棿鐨勯夋嫨鎴栬呮墍鏈夎繖浜涚粍浠剁殑浠繪剰緇勫悎銆?/strong>


闄愬畾絎?/h3>
銆銆闄愬畾絎︾敤鏉ユ寚瀹氭鍒欒〃杈懼紡鐨勪竴涓粰瀹氱粍浠跺繀欏昏鍑虹幇澶氬皯嬈℃墠鑳芥弧瓚沖尮閰嶃傛湁*鎴?鎴?鎴杮n}鎴杮n,}鎴杮n,m}鍏?縐嶃?br /> *銆?鍜?闄愬畾絎﹂兘鏄椽濠殑錛屽洜涓哄畠浠細灝藉彲鑳藉鐨勫尮閰嶆枃瀛楋紝鍙湁鍦ㄥ畠浠殑鍚庨潰鍔犱笂涓涓?灝卞彲浠ュ疄鐜伴潪璐┆鎴栨渶灝忓尮閰嶃?br /> 銆銆姝e垯琛ㄨ揪寮忕殑闄愬畾絎︽湁錛?br />
瀛楃 鎻忚堪
* 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨澶氭銆備緥濡傦紝zo* 鑳藉尮閰?"z" 浠ュ強 "zoo"銆? 絳変環浜巤0,}銆?/td>
+
?
{n} n 鏄竴涓潪璐熸暣鏁般傚尮閰嶇‘瀹氱殑 n 嬈°備緥濡傦紝'o{2}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鏄兘鍖歸厤 "food" 涓殑涓や釜 o銆?/td>
{n,} n 鏄竴涓潪璐熸暣鏁般傝嚦灝戝尮閰峮 嬈°備緥濡傦紝'o{2,}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鑳藉尮閰?"foooood" 涓殑鎵鏈?o銆?o{1,}' 絳変環浜?'o+'銆?o{0,}' 鍒欑瓑浠蜂簬 'o*'銆?/td>
{n,m} m 鍜?n 鍧囦負闈炶礋鏁存暟錛屽叾涓璶 <= m銆傛渶灝戝尮閰?n 嬈′笖鏈澶氬尮閰?m 嬈°備緥濡傦紝"o{1,3}" 灝嗗尮閰?"fooooood" 涓殑鍓嶄笁涓?o銆?o{0,1}' 絳変環浜?'o?'銆傝娉ㄦ剰鍦ㄩ楀彿鍜屼袱涓暟涔嬮棿涓嶈兘鏈夌┖鏍箋?/td>

瀹氫綅絎?/h3>
銆銆鐢ㄦ潵鎻忚堪瀛楃涓叉垨鍗曡瘝鐨勮竟鐣岋紝^鍜?鍒嗗埆鎸囧瓧絎︿覆鐨勫紑濮嬩笌緇撴潫錛孿b鎻忚堪鍗曡瘝鐨勫墠鎴栧悗杈圭晫錛孿B琛ㄧず闈炲崟璇嶈竟鐣屻?ins>涓嶈兘瀵瑰畾浣嶇浣跨敤闄愬畾絎︺?/ins>

閫夋嫨


銆銆鐢ㄥ渾鎷彿灝嗘墍鏈夐夋嫨欏規嫭璧鋒潵錛岀浉閭葷殑閫夋嫨欏逛箣闂寸敤|鍒嗛殧銆備絾鐢ㄥ渾鎷彿浼氭湁涓涓壇浣滅敤錛屾槸鐩稿叧鐨勫尮閰嶄細琚紦瀛橈紝姝ゆ椂鍙敤?:鏀懼湪絎竴涓夐」鍓嶆潵娑堥櫎榪欑鍓綔鐢ㄣ?br /> 銆銆鍏朵腑?:鏄潪鎹曡幏鍏冧箣涓錛岃繕鏈変袱涓潪鎹曡幏鍏冩槸?=鍜?!錛岃繖涓や釜榪樻湁鏇村鐨勫惈涔夛紝鍓嶈呬負姝e悜棰勬煡錛屽湪浠諱綍寮濮嬪尮閰嶅渾鎷彿鍐呯殑姝e垯琛ㄨ揪寮忔ā寮忕殑浣嶇疆鏉ュ尮閰嶆悳绱㈠瓧絎︿覆錛屽悗鑰呬負璐熷悜棰勬煡錛屽湪浠諱綍寮濮嬩笉鍖歸厤璇ユ鍒欒〃杈懼紡妯″紡鐨勪綅緗潵鍖歸厤鎼滅儲瀛楃涓層?

鍚庡悜寮曠敤


銆銆瀵逛竴涓鍒欒〃杈懼紡妯″紡鎴栭儴鍒嗘ā寮忎袱杈規坊鍔犲渾鎷彿灝嗗鑷寸浉鍏沖尮閰嶅瓨鍌ㄥ埌涓涓復鏃剁紦鍐插尯涓紝鎵鎹曡幏鐨勬瘡涓瓙鍖歸厤閮芥寜鐓у湪姝e垯琛ㄨ揪寮忔ā寮忎腑浠庡乏鑷沖彸鎵閬囧埌鐨? 鍐呭瀛樺偍銆傚瓨鍌ㄥ瓙鍖歸厤鐨勭紦鍐插尯緙栧彿浠?1 寮濮嬶紝榪炵畫緙栧彿鐩磋嚦鏈澶?99 涓瓙琛ㄨ揪寮忋傛瘡涓紦鍐插尯閮藉彲浠ヤ嬌鐢?'\n' 璁塊棶錛屽叾涓?n 涓轟竴涓爣璇嗙壒瀹氱紦鍐插尯鐨勪竴浣嶆垨涓や綅鍗佽繘鍒舵暟銆?br /> 銆銆鍙互浣跨敤闈炴崟鑾峰厓瀛楃 '?:', '?=', or '?!' 鏉ュ拷鐣ュ鐩稿叧鍖歸厤鐨勪繚瀛樸?

鍚勭鎿嶄綔絎︾殑榪愮畻浼樺厛綰?/h3>
銆銆鐩稿悓浼樺厛綰х殑浠庡乏鍒板彸榪涜榪愮畻錛屼笉鍚屼紭鍏堢駭鐨勮繍綆楀厛楂樺悗浣庛傚悇縐嶆搷浣滅鐨勪紭鍏堢駭浠庨珮鍒頒綆濡備笅錛?br />
鎿嶄綔絎?鎻忚堪
\ 杞箟絎?/td>
(), (?:), (?=), [] 鍦嗘嫭鍙峰拰鏂規嫭鍙?/td>
*, +, ?, {n}, {n,}, {n,m} 闄愬畾絎?/td>
^, $, \anymetacharacter 浣嶇疆鍜岄『搴?/td>
| 鈥滄垨鈥濇搷浣?/td>

鍏ㄩ儴絎﹀彿瑙i噴


瀛楃 鎻忚堪
\
^ 鍖歸厤杈撳叆瀛楃涓茬殑寮濮嬩綅緗傚鏋滆緗簡 RegExp 瀵硅薄鐨?Multiline 灞炴э紝^ 涔熷尮閰?'\n' 鎴?'\r' 涔嬪悗鐨勪綅緗?/td>
$ 鍖歸厤杈撳叆瀛楃涓茬殑緇撴潫浣嶇疆銆傚鏋滆緗簡RegExp 瀵硅薄鐨?Multiline 灞炴э紝$ 涔熷尮閰?'\n' 鎴?'\r' 涔嬪墠鐨勪綅緗?/td>
* 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨澶氭銆備緥濡傦紝zo* 鑳藉尮閰?"z" 浠ュ強 "zoo"銆? 絳変環浜巤0,}銆?/td>
+
?
{n} n 鏄竴涓潪璐熸暣鏁般傚尮閰嶇‘瀹氱殑 n 嬈°備緥濡傦紝'o{2}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鏄兘鍖歸厤 "food" 涓殑涓や釜 o銆?/td>
{n,} n 鏄竴涓潪璐熸暣鏁般傝嚦灝戝尮閰峮 嬈°備緥濡傦紝'o{2,}' 涓嶈兘鍖歸厤 "Bob" 涓殑 'o'錛屼絾鑳藉尮閰?"foooood" 涓殑鎵鏈?o銆?o{1,}' 絳変環浜?'o+'銆?o{0,}' 鍒欑瓑浠蜂簬 'o*'銆?/td>
{n,m} m 鍜?n 鍧囦負闈炶礋鏁存暟錛屽叾涓璶 <= m銆傛渶灝戝尮閰?n 嬈′笖鏈澶氬尮閰?m 嬈°備緥濡傦紝"o{1,3}" 灝嗗尮閰?"fooooood" 涓殑鍓嶄笁涓?o銆?o{0,1}' 絳変環浜?'o?'銆傝娉ㄦ剰鍦ㄩ楀彿鍜屼袱涓暟涔嬮棿涓嶈兘鏈夌┖鏍箋?/td>
? 褰? 璇ュ瓧絎︾揣璺熷湪浠諱綍涓涓叾浠栭檺鍒剁 (*, +, ?, {n}, {n,}, {n,m}) 鍚庨潰鏃訛紝鍖歸厤妯″紡鏄潪璐┆鐨勩傞潪璐┆妯″紡灝藉彲鑳藉皯鐨勫尮閰嶆墍鎼滅儲鐨勫瓧絎︿覆錛岃岄粯璁ょ殑璐┆妯″紡鍒欏敖鍙兘澶氱殑鍖歸厤鎵鎼滅儲鐨勫瓧絎︿覆銆備緥濡傦紝瀵逛簬瀛楃涓? "oooo"錛?o+?' 灝嗗尮閰嶅崟涓?"o"錛岃?'o+' 灝嗗尮閰嶆墍鏈?'o'銆?/td>
.
(pattern) 鍖歸厤 pattern 騫惰幏鍙栬繖涓鍖歸厤銆傛墍鑾峰彇鐨勫尮閰嶅彲浠ヤ粠浜х敓鐨?Matches 闆嗗悎寰楀埌錛屽湪VBScript 涓嬌鐢?SubMatches 闆嗗悎錛屽湪JScript 涓垯浣跨敤 $0鈥?9 灞炴с傝鍖歸厤鍦嗘嫭鍙峰瓧絎︼紝璇蜂嬌鐢?'\(' 鎴?'\)'銆?/td>
(?:pattern) 鍖? 閰?pattern 浣嗕笉鑾峰彇鍖歸厤緇撴灉錛屼篃灝辨槸璇磋繖鏄竴涓潪鑾峰彇鍖歸厤錛屼笉榪涜瀛樺偍渚涗互鍚庝嬌鐢ㄣ傝繖鍦ㄤ嬌鐢?"鎴? 瀛楃 (|) 鏉ョ粍鍚堜竴涓ā寮忕殑鍚勪釜閮ㄥ垎鏄緢鏈夌敤銆備緥濡傦紝 'industr(?:y|ies) 灝辨槸涓涓瘮 'industry|industries' 鏇寸畝鐣ョ殑琛ㄨ揪寮忋?/td>
(?=pattern) 姝? 鍚戦鏌ワ紝鍦ㄤ換浣曞尮閰?pattern 鐨勫瓧絎︿覆寮濮嬪鍖歸厤鏌ユ壘瀛楃涓層傝繖鏄竴涓潪鑾峰彇鍖歸厤錛屼篃灝辨槸璇達紝璇ュ尮閰嶄笉闇瑕佽幏鍙栦緵浠ュ悗浣跨敤銆備緥濡傦紝'Windows (?=95|98|NT|2000)' 鑳藉尮閰?"Windows 2000" 涓殑 "Windows" 錛屼絾涓嶈兘鍖歸厤 "Windows 3.1" 涓殑 "Windows"銆傞鏌ヤ笉娑堣楀瓧絎︼紝涔熷氨鏄錛屽湪涓涓尮閰嶅彂鐢熷悗錛屽湪鏈鍚庝竴嬈″尮閰嶄箣鍚庣珛鍗沖紑濮嬩笅涓嬈″尮閰嶇殑鎼滅儲錛岃屼笉鏄粠鍖呭惈棰勬煡鐨勫瓧絎︿箣鍚庡紑濮嬨?/td>
(?!pattern) 璐? 鍚戦鏌ワ紝鍦ㄤ換浣曚笉鍖歸厤 pattern 鐨勫瓧絎︿覆寮濮嬪鍖歸厤鏌ユ壘瀛楃涓層傝繖鏄竴涓潪鑾峰彇鍖歸厤錛屼篃灝辨槸璇達紝璇ュ尮閰嶄笉闇瑕佽幏鍙栦緵浠ュ悗浣跨敤銆備緥濡?Windows (?!95|98|NT|2000)' 鑳藉尮閰?"Windows 3.1" 涓殑 "Windows"錛屼絾涓嶈兘鍖歸厤 "Windows 2000" 涓殑 "Windows"銆傞鏌ヤ笉娑堣楀瓧絎︼紝涔熷氨鏄錛屽湪涓涓尮閰嶅彂鐢熷悗錛屽湪鏈鍚庝竴嬈″尮閰嶄箣鍚庣珛鍗沖紑濮嬩笅涓嬈″尮閰嶇殑鎼滅儲錛岃屼笉鏄粠鍖呭惈棰勬煡鐨勫瓧絎︿箣鍚庡紑濮?/td>
x|y 鍖歸厤 x 鎴?y銆備緥濡傦紝'z|food' 鑳藉尮閰?"z" 鎴?"food"銆?(z|f)ood' 鍒欏尮閰?"zood" 鎴?"food"銆?/td>
[xyz]
[^xyz]
[a-z]
[^a-z]
\b
\B
\cx 鍖歸厤鐢?x 鎸囨槑鐨勬帶鍒跺瓧絎︺備緥濡傦紝 \cM 鍖歸厤涓涓?Control-M 鎴栧洖杞︾銆倄 鐨勫煎繀欏諱負 A-Z 鎴?a-z 涔嬩竴銆傚惁鍒欙紝灝?c 瑙嗕負涓涓師涔夌殑 'c' 瀛楃銆?/td>
\d 鍖歸厤涓涓暟瀛楀瓧絎︺傜瓑浠蜂簬 [0-9]銆?/td>
\D 鍖歸厤涓涓潪鏁板瓧瀛楃銆傜瓑浠蜂簬 [^0-9]銆?/td>
\f 鍖歸厤涓涓崲欏電銆傜瓑浠蜂簬 \x0c 鍜?\cL銆?/td>
\n 鍖歸厤涓涓崲琛岀銆傜瓑浠蜂簬 \x0a 鍜?\cJ銆?/td>
\r 鍖歸厤涓涓洖杞︾銆傜瓑浠蜂簬 \x0d 鍜?\cM銆?/td>
\s 鍖歸厤浠諱綍絀虹櫧瀛楃錛屽寘鎷┖鏍箋佸埗琛ㄧ銆佹崲欏電絳夌瓑銆傜瓑浠蜂簬 [ \f\n\r\t\v]銆?/td>
\S 鍖歸厤浠諱綍闈炵┖鐧藉瓧絎︺傜瓑浠蜂簬 [^ \f\n\r\t\v]銆?/td>
\t 鍖歸厤涓涓埗琛ㄧ銆傜瓑浠蜂簬 \x09 鍜?\cI銆?/td>
\v 鍖歸厤涓涓瀭鐩村埗琛ㄧ銆傜瓑浠蜂簬 \x0b 鍜?\cK銆?/td>
\w
\W
\xn 鍖歸厤 n錛屽叾涓?n 涓哄崄鍏繘鍒惰漿涔夊箋傚崄鍏繘鍒惰漿涔夊煎繀欏諱負紜畾鐨勪袱涓暟瀛楅暱銆備緥濡傦紝'\x41' 鍖歸厤 "A"銆?\x041' 鍒欑瓑浠蜂簬 '\x04' & "1"銆傛鍒欒〃杈懼紡涓彲浠ヤ嬌鐢?ASCII 緙栫爜銆?
\num 鍖歸厤 num錛屽叾涓?num 鏄竴涓鏁存暟銆傚鎵鑾峰彇鐨勫尮閰嶇殑寮曠敤銆備緥濡傦紝'(.)\1' 鍖歸厤涓や釜榪炵畫鐨勭浉鍚屽瓧絎︺?/td>
\n 鏍囪瘑涓涓叓榪涘埗杞箟鍊兼垨涓涓悜鍚庡紩鐢ㄣ傚鏋?\n 涔嬪墠鑷沖皯 n 涓幏鍙栫殑瀛愯〃杈懼紡錛屽垯 n 涓哄悜鍚庡紩鐢ㄣ傚惁鍒欙紝濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-7)錛屽垯 n 涓轟竴涓叓榪涘埗杞箟鍊箋?/td>
\nm 鏍? 璇嗕竴涓叓榪涘埗杞箟鍊兼垨涓涓悜鍚庡紩鐢ㄣ傚鏋?\nm 涔嬪墠鑷沖皯鏈?nm 涓幏寰楀瓙琛ㄨ揪寮忥紝鍒?nm 涓哄悜鍚庡紩鐢ㄣ傚鏋?\nm 涔嬪墠鑷沖皯鏈?n 涓幏鍙栵紝鍒?n 涓轟竴涓悗璺熸枃瀛?m 鐨勫悜鍚庡紩鐢ㄣ傚鏋滃墠闈㈢殑鏉′歡閮戒笉婊¤凍錛岃嫢 n 鍜?m 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯 \nm 灝嗗尮閰嶅叓榪涘埗杞箟鍊?nm銆?/td>
\nml 濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-3)錛屼笖 m 鍜?l 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯鍖歸厤鍏繘鍒惰漿涔夊?nml銆?/td>
\un 鍖歸厤 n錛屽叾涓?n 鏄竴涓敤鍥涗釜鍗佸叚榪涘埗鏁板瓧琛ㄧず鐨?Unicode 瀛楃銆備緥濡傦紝 \u00A9 鍖歸厤鐗堟潈絎﹀彿 (?)銆?/td>

閮ㄥ垎渚嬪瓙


姝e垯琛ㄨ揪寮?/td>璇存槑
/\b([a-z]+) \1\b/gi涓涓崟璇嶈繛緇嚭鐜扮殑浣嶇疆
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 灝嗕竴涓猆RL瑙f瀽涓哄崗璁佸煙銆佺鍙e強鐩稿璺緞
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/瀹氫綅绔犺妭鐨勪綅緗?/td>
/[-a-z]/A鑷硓鍏?6涓瓧姣嶅啀鍔犱竴涓?鍙楓?/td>
/ter\b/鍙尮閰峜hapter錛岃屼笉鑳絫erminal
/\Bapt/鍙尮閰峜hapter錛岃屼笉鑳絘ptitude
/Windows(?=95 |98 |NT )/鍙尮閰峎indows95鎴朩indows98鎴朩indowsNT,褰撴壘鍒頒竴涓尮閰嶅悗錛屼粠Windows鍚庨潰寮濮嬭繘琛屼笅涓嬈$殑媯绱㈠尮閰嶃?/td>



brent 2006-12-03 00:28 鍙戣〃璇勮
]]> 久久夜色精品国产亚洲av| 91精品国产9l久久久久| 99久久国产综合精品五月天喷水| 久久国产亚洲精品麻豆| 伊人色综合久久天天| 欧洲性大片xxxxx久久久| 欧美国产成人久久精品| 久久精品国产亚洲av影院| 国产免费久久精品99久久| 久久久精品久久久久特色影视| 久久久这里有精品| 精品亚洲综合久久中文字幕| 欧美亚洲日本久久精品| 99久久精品国产免看国产一区| 亚洲国产精品嫩草影院久久| 久久精品无码一区二区无码| 亚洲国产高清精品线久久 | 精品综合久久久久久97超人 | 久久天天日天天操综合伊人av| 漂亮人妻被中出中文字幕久久| 青草影院天堂男人久久| 2020国产成人久久精品| 婷婷久久综合九色综合98| 亚洲中文久久精品无码ww16| 久久国产免费| 91久久成人免费| 久久久久久夜精品精品免费啦 | 国产精品成人久久久久久久 | 国产成人精品久久一区二区三区 | 少妇久久久久久久久久| 欧美一级久久久久久久大片| 国产综合成人久久大片91| 久久99精品久久久久久动态图| 国产精品中文久久久久久久| 亚洲欧美日韩精品久久亚洲区 | 亚洲精品乱码久久久久久蜜桃图片| 久久99精品国产麻豆不卡| 国产L精品国产亚洲区久久| 久久精品国产免费| 国产2021久久精品| 久久久久亚洲?V成人无码|