<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Chen Sheng - 不用分类</title><link>http://chensheng.net/</link><description>chensheng.net  - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>Copyright 2000-2008 @ chensheng.net.(qq:99479) All Rights Reserved.浙ICP备09092413号 </copyright><pubDate>Tue, 07 Sep 2010 20:58:03 +0800</pubDate><item><title>病毒清除后，服务无法启动怎么办？</title><author>crazycs@163.com (cs)</author><link>http://chensheng.net/post/18.html</link><pubDate>Wed, 25 Mar 2009 20:37:56 +0800</pubDate><guid>http://chensheng.net/post/18.html</guid><description><![CDATA[<p>kaspersky 在我机器上发现了一个木马，倒是把木马给杀掉了--最近这几天乱装的软件太多了---又忘记开kaspersky了。同时导致我的一个服务怎么也启动不了。<br />想了好久才想到原因。记录如下：</p><p>他会同时把注册表中 某些重要的地方有这个木马文件名的注册表项也给删除掉。<br />因此，你即使将被修改过的dll恢复，也会导致一些其他的错误。</p><p>这是第二回了，上回弄了我好几天才找到原因，修复后没有作记录。<br />今天这事又发生了，只是有点印象，结果还是想了一个小时才找到解决办法。<br />故特此记录。</p><p>因此，一旦当某木马或病毒被发现并清除之后，系统如果出一些错误，如服务无法启动，则可以从这个方面着手思考。</p><p>抱怨一下：kaspersky怎么也应该把除删除文件外的一些重点操作，如删除注册表项等记录起来，或者写到一个日志文件里（或许有？我不知道？）。</p>]]></description><category>不用分类</category><comments>http://chensheng.net/post/18.html#comment</comments><wfw:comment>http://chensheng.net/</wfw:comment><wfw:commentRss>http://chensheng.net/feed.asp?cmt=18</wfw:commentRss><trackback:ping>http://chensheng.net/cmd.asp?act=tb&amp;id=18&amp;key=4b319425</trackback:ping></item><item><title>字符集拾遗</title><author>crazycs@163.com (cs)</author><link>http://chensheng.net/post/12.html</link><pubDate>Wed, 15 Aug 2007 22:34:26 +0800</pubDate><guid>http://chensheng.net/post/12.html</guid><description><![CDATA[<strong><h3><strong><span style="FONT-WEIGHT: bold"><strong>DBCS</strong> 是双字符集</span></strong></h3><p>&nbsp;它兼容ascii。也就是说，在DBCS中，ANSI所表示的字符是一样的。这就是说DBCS并不总是用双字符，只是在需要的时候，最多用双字符来表示。DBCS是一种统称，一种泛指。具体来说，<font size="2">Shift-JIS,</font>gb2312,big5,gbk,gb18030等等都是dbcs的一种具体实现方案。</p><p>GB2312(1980年)一共收录了7445个字符，包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7，低字节从A1-FE，占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE</p><p>　GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号，它分为汉字区和图形符号区。汉字区包括21003个字符</p><p>2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字，同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030，对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。</p><p>从ASCII、GB2312、GBK到GB18030，这些编码方法是向下兼容的，即同一个字符在这些方案中总是有相同的编码，后面的标准支持更多的字符。在这些编码中，英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼，GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。</p><p>&nbsp;</p><p>&nbsp;</p><p>这里还有一些细节：</p><ul>    <li>GB2312的原文还是区位码，从区位码到内码，需要在高字节和低字节上分别加上A0。 </li>    <li>在DBCS中，GB内码的存储格式始终是大端字节顺序（即网络节顺序），即高位在前。 </li>    <li><font size="2">GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析：在读取DBCS字符流时，只要遇到高位为1的字节，就可以将下两个字节作为一个双字节编码，而不用管低字节的高位是什么。</font></li></ul><h3>那么又什么是<strong>区位码</strong>？</h3><p>区位码，即是区码与位码。</p><p>我国国家标准局于1981年5月颁布了《信息交换用汉字编码字符集&mdash;&mdash;基本集》，代号为GB2312-80，共对6763个汉字和682个图形字符进行了编码，其编码原则为：汉字用两个字节表示，每个字节用七位码（高位为0），;国家标准将汉字和图形符号排列在一个94行94列的二维代码表中，;每两个字节分别用两位十进制编码，前字节的编码称为区码，后字节的编码称为位码，此即区位码，;如&ldquo;保&rdquo;字在二维代码表中处于17区第3位，区位码即为&ldquo;1703 &rdquo;。 </p><p>&nbsp;</p><h3>国标码</h3><p>国标码是汉字信息交换的标准编码.是指我国1981年公布的&ldquo;中华人民共和国<nobr>国家标准</nobr>信息交换汉字编码&rdquo;，代号为&ldquo;GB2312-80&rdquo;。由连续的两个字节组成。</p><p>国标码：并不等于区位码，它是由区位码稍作转换得到,其转换方法为：先将十进制区码和位码转换为十六进制的区码和位码，;这样就得了一个与国标码有一个相对位置差的代码，;再将这个代码的第一个字节和第二个字节分别加上20H，就得到国标码。如：&ldquo;保&rdquo;字的国标码为3123H，它是经过下面的转换得到的：1703D－&gt;1103H-&gt;+20H－&gt;3123H。</p><p>国标码很少直接使用。</p><p>那上面的所谓内码又是什么呢？其实就是gb2312编码时存储表示汉字的代码。从区位码到内码，需要在高字节和低字节上分别加上A0。</p><p>国标码是汉字信息交换的标准编码，但因其前后字节的最高位为0，与ASCII码发生冲突，如&ldquo;保&rdquo;字，国标码为31H和23H（区位码为0x1103)，而西文字符&ldquo;1&rdquo;和&ldquo;#&rdquo;的SCII也为31H和23H，现假如内存中有两个字节为31H和23H，;这到底是一个汉字，还是两个西文字符&ldquo;1&rdquo;;和&ldquo;#&rdquo;?于是就出现了二义性，显然，国标码是不可能在计算机内部直接采用的，于是，;汉字的机内码采用变形国标码，其变换方法为：将国标码的每个字节都加上128(0xA0)，即将两个字节的最高位由0改1，其余7位不变，如：由上面我们知道，&ldquo;保&rdquo;字的国标码为3123H，前字节为00110001B，后字节为00100011B，高位改1为10110001B和10100011B 即为B1A3H，因此，字的机内码就是B1A3H。<br /></p><h3>MBCS 又是什么呢？</h3><p>MBCS=多字节字符集。所以DBCS(双字节字符集)又说回来是MBCS的一种实现策略。DBCS似乎是MBCS的主要实现（因为中文，日文等是主要需求这MBCS），所以可以简单的认为MBCS一般就是DBCS好了。</p><p>为了完整起见，再说一下SBCS（即单字符集）。ASCII码就是单字符集，没办法来表示更多字符。</p><p><blockquote><div class="quote"></p><ul>    <li>mbcs=1个文字由多个字节表现的文字的集合。同时，指在其文字中分配的字符编码的体系。 </li>    <li>像日语和中文等文字组/编码一样地，把以2个字节表现1个字的文字组和编码体系特别地称为DBCS(Double Byte Character Set)。 </li>    <li>把拉丁字母和数字&middot;记号的ASCII等，以一个字节表现1个字的文字组和编码体系的叫做SBCS(Single Byte Character Set)。</li></ul><p></div></blockquote></p><p>MBCS(DBCS)主要是一种unicode的一种替换</p><h3>那什么又是unicode?</h3><p>unicode是一件大工程。</p><p><font size="2">Unicode也是一种字符编码方法，不过它是由国际组织设计，可以容纳全世界所有语言文字的编码方案。Unicode的学名是&quot;Universal Multiple-Octet Coded Character Set&quot;，简称为UCS。UCS可以看作是&quot;Unicode Character Set&quot;的缩写。</font></p><p><font size="2">前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容（更准确地说，是与ISO-8859-1兼容），与GB码不兼容。例如&ldquo;汉&rdquo;字的Unicode编码是6C49，而GB码是BABA。</font></p><p><font size="2"></font></p><p>Unicode 具体不多说了，一般有有ucs与utf之说。</p><p><font size="2">UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码，是由UTF(UCS Transformation Format)规范规定的，常见的UTF规范包括UTF-8、UTF-7、UTF-16。</font></p><font size="2"><h3><font size="2">ucs与utf是unicode的二个方面。</font></h3></font><p>而ucs分成ucs-2与ucs-4。基本上在现实应用中，可以忽略ucs-4（基本上没有软件使用它）</p><p><font size="2">UCS有两种格式：UCS-2和UCS-4。顾名思义，UCS-2就是用两个字节编码，UCS-4就是用4个字节（实际上只用了31位，最高位必须为0）编码。</font></p><p><font size="2">UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下：</font></p><p>&nbsp;</p><table width="75%" border="1">    <tbody>        <tr>            <td><font size="2">UCS-2编码(16进制)</font></td>            <td><font size="2">UTF-8 字节流(二进制)</font></td>        </tr>        <tr>            <td><font size="2">0000 - 007F</font></td>            <td><font size="2">0xxxxxxx</font></td>        </tr>        <tr>            <td><font size="2">0080 - 07FF</font></td>            <td><font size="2">110xxxxx 10xxxxxx</font></td>        </tr>        <tr>            <td><font size="2">0800 - FFFF</font></td>            <td><font size="2">1110xxxx 10xxxxxx 10xxxxxx</font></td>        </tr>    </tbody></table><p>&nbsp;</p><p><font size="2">例如&ldquo;汉&rdquo;字的Unicode编码是6C49。6C49在0800-FFFF之间，所以肯定要用3字节模板了：<font color="#0000ff">1110</font>xxxx <font color="#0000ff">10</font>xxxxxx <font color="#0000ff">10</font>xxxxxx。将6C49写成二进制是：0110 110001 001001， 用这个比特流依次代替模板中的x，得到：<font color="#0000ff">1110</font>0110 <font color="#0000ff">10</font>110001 <font color="#0000ff">10</font>001001，即E6 B1 89。</font></p><p><font size="2">读者可以用记事本测试一下我们的编码是否正确。</font></p><p><font size="2">UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码，UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码，定义了一个算法。不过由于实际使用的UCS2，或者UCS4的BMP必然小于0x10000，所以就目前而言，可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案，UTF-16却要用于实际的传输，所以就不得不考虑字节序的问题。</font></p><h3>UTF的字节序和BOM</h3><p><font size="2">UTF-8以字节为编码单元，没有字节序的问题。UTF-16以两个字节为编码单元，在解释一个UTF-16文本前，首先要弄清楚每个编码单元的字节序。例如收到一个&ldquo;奎&rdquo;的Unicode编码是594E，&ldquo;乙&rdquo;的Unicode编码是4E59。如果我们收到UTF-16字节流&ldquo;594E&rdquo;，那么这是&ldquo;奎&rdquo;还是&ldquo;乙&rdquo;？</font></p><p><font size="2">Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是&ldquo;Bill Of Material&rdquo;的BOM表，而是Byte Order Mark。BOM是一个有点小聪明的想法：</font></p><p><font size="2">在UCS编码中有一个叫做&quot;ZERO WIDTH NO-BREAK SPACE&quot;的字符，它的编码是FEFF。而FFFE在UCS中是不存在的字符，所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前，先传输字符&quot;ZERO WIDTH NO-BREAK SPACE&quot;。</font></p><p><font size="2">这样如果接收者收到FEFF，就表明这个字节流是Big-Endian的；如果收到FFFE，就表明这个字节流是Little-Endian的。因此字符&quot;ZERO WIDTH NO-BREAK SPACE&quot;又被称作BOM。</font></p><p><font size="2">UTF-8不需要BOM来表明字节顺序，但可以用BOM来表明编码方式。字符&quot;ZERO WIDTH NO-BREAK SPACE&quot;的UTF-8编码是EF BB BF（读者可以用我们前面介绍的编码方法验证一下）。所以如果接收者收到以EF BB BF开头的字节流，就知道这是UTF-8编码了。</font></p><p>&nbsp;实际在我们用vc编写程序的时候，unicode就基本是用ucs。</p><p>&nbsp;</p><div class="posthead">　UTF-7</div><div class="postbody"><p>　　MIME(Multipurpose Internet Mail Extensions) 中没有将 Unicode 定义为一种许可的字符集，也没有规定其如何编码。虽然已有其他的一些编码格式（如：UTF-8）应用于邮件当中，但它们使用了128到255之间的数值去表示 Unicode 字符，这对于非 US-ASCII 的字符集的编解码是不利的。 <br />　　因为很多邮件网关和系统无法正确地提交八位的 US-ASCII 码，这样使用扩展的 US-ASCII 的字符将出现丢失位(bit)的情况。由于 UTF-7 只使用 7 位(bit)，最高位不使用，因此 UTF-7 编码能够完整的在这些系统中进行传输。 <br />　　对于部分US-ASCII 字符和 US-ASCII 以外的字符，UTF-7 采用变字节顺序的方法进行解码，并使用 US-ASCII 中的保留字符作为转换字符(shift character)。以下是 UTF-7 编码和解码规则的说明。 </p><p>　　UTF-7 将 Unicode 字符分为三种进行处理： </p><ol>    <li>直接进行编码的字符，即直接使用 US-ASCII 作为编码的字符。这类字符包括大小写字母、数字字符、以及下列字符。（注意不包含字符 + ） <br />    <span style="COLOR: #008000">'&nbsp; (&nbsp; )&nbsp; ,&nbsp; -&nbsp; .&nbsp; /&nbsp; :&nbsp; ? 。</span> </li>    <li>可选择的直接进行编码的字符。（注意不包含字符 \ 和字符 ~）&nbsp; <br />    &nbsp;<span style="COLOR: #008000">! &quot; # $ % &amp; * ; &lt; = &gt; @ [ ] ^ _ ' { | }</span> </li>    <li>除1、2两种字符以外的 Unicode字符。 </li></ol><p>&nbsp;</p><p><strong>&nbsp;UTF-7 的编码规则</strong> </p><p>&nbsp;</p><ol>    <li>(direct encoding) 对于第一类字符，直接使用 US-ASCII 进行编码，对于第二类字符，则可选择的使用 US-ASCII 或变字节顺序的方法进行编码。但要注意，在邮件头中，若直接对第二类字符使用 US-ASCII 进行编码，可能会出现某些网关无法正确读取的现象。 </li>    <li>(Unicode shifted encoding) 除字符 &quot;+&quot; 和第一、二类两种字符以外字符需采用变字节顺序的方法进行解码，使用符号 &quot;+&quot; 控制编码过程的开始，直到遇到回车，换行字符或文末则结束，并使用 &quot;-&quot; 控制编码过程的结束。在 &quot;+&quot; 与 &quot;-&quot; 的编码采用修正的 Base64 编码表示。 <br />    <em>例如：</em> 字符串&quot;A&ne;&Alpha;&quot;(Unicode: 0041 2260 0391)的编码为：A+ImADkQ-(ASCII: 41 2B 49 6D 41 44 6B 51 2D) </li>    <li>特殊字符 &quot;+&quot; 的编码为2B2D(H)。当出现着编码为2B2D(H)，即&quot;+-&quot;的特殊情况时，直接则认定 2D(H) 无效，并予以忽略。因此2B2D(H)编码，解码得到的字符串为&quot;+&quot;，而不是&quot;+-&quot;。对于编码2B2D2D(H)，解码得到的字符串才是&quot;+-&quot;。 </li>    <li>空格(dec 32), 跳格(dec 9), 回车(dec 13)和换行(dec 10)，直接使用 US-ASCII 进行编码。 </li></ol></div></strong>]]></description><category>不用分类</category><comments>http://chensheng.net/post/12.html#comment</comments><wfw:comment>http://chensheng.net/</wfw:comment><wfw:commentRss>http://chensheng.net/feed.asp?cmt=12</wfw:commentRss><trackback:ping>http://chensheng.net/cmd.asp?act=tb&amp;id=12&amp;key=108c9a3c</trackback:ping></item><item><title>在UltraEdit的查找和替换中使用正则表达式 (转) </title><author>crazycs@163.com (cs)</author><link>http://chensheng.net/post/6.html</link><pubDate>Sat, 02 Jun 2007 16:50:13 +0800</pubDate><guid>http://chensheng.net/post/6.html</guid><description><![CDATA[很多朋友都用过或者正在用UltraEdit，这个编辑器陪伴我也好几年了，从很多地方影响着我写代码的快捷键习惯，Ultraedit提供了非常丰富的编辑功能，其中非常重要的查找和替换功能一定大家都用过，Ultraedit提供的查找替换功能非常方便和强大，可以在单独文件里面查找替换，也可以在多个文件、多个目录里面进行查找替换。而我们在使用这些查找替换功能的时候，一般都是针对某个字符串进行，前两天我要对一个目录下（包含子目录）所有的html文件中某一段代码进行查找替换，一下子不知道怎么操作了，由于长期写程序用到正则表达式，于是猜想具备如此强大功能的Ultraedit一定也有这样类似的匹配功能，于是点击Help一看，果然不出所料，Ultraedit支持基本的正则表达式匹配查找和替换功能，这能满足我们几乎全部的需要了。<p><br />下面是对UltraEdit的Help中针对查找替换使用正则表达式部分的整理，最后还有我前两天用到的一个多行代码查找替换的例子。</p><p>Ultraedit在使用正则表达式进行查找替换时有两个可使用的语法集合。一个是 UltraEdit 的更早的版本被使用的原来的 UltraEdit 句法。另一个是&rdquo;Unix&rdquo;类型的正则表达式，这个集合在ultraedit的默认配置中是没有启用的，需要在配置中找到search项，启用Unix类型的正则表达式。</p><p><strong>语法集合一：</strong></p><p>符号&nbsp; 功能<br /><font style="BACKGROUND-COLOR: #c0c0c0" color="#000000">%&nbsp;&nbsp;&nbsp;&nbsp; 匹配行的开始 - 显示搜索字符串必须在行的开始，但是在所选择的结果字符串中不包括任何行终止字符。<br />$&nbsp;&nbsp;&nbsp;&nbsp; 匹配行尾 - 显示搜索字符串必须在行尾，但是在所选择的结果字符串中不包括任何行终止字符。<br />?&nbsp;&nbsp;&nbsp;&nbsp; 除了换行符以外匹配任何单个的字符<br />*&nbsp;&nbsp;&nbsp;&nbsp; 除了换行符匹配任何数量的字符和数字<br />+&nbsp;&nbsp;&nbsp;&nbsp; 前一字符匹配一个或多个，但至少要出现一个<br />++&nbsp;&nbsp;&nbsp; 前一字符匹配零个或多个，但至少要出现一个<br />^b&nbsp;&nbsp;&nbsp; 匹配一个分页<br />^p&nbsp;&nbsp;&nbsp; 匹配一个换行符(CR/LF)(段)(DOS文件)<br />^r&nbsp;&nbsp;&nbsp; 匹配一个换行符(CR 仅仅)(段)(MAC 文件)<br />^n&nbsp;&nbsp;&nbsp; 匹配一个换行符 ( LF 仅仅 )( 段 )( UNIX 文件 )<br />^t&nbsp;&nbsp;&nbsp; 匹配一个标签字符TAB <br />[]&nbsp;&nbsp;&nbsp; 匹配任何单个的字符，或在方括号中的范围<br />^{A^}^{ B^} 匹配表达式A或 B <br />^&nbsp;&nbsp;&nbsp;&nbsp; 重载其后的正规表达式字符 <br />^(^)&nbsp; 括或标注为用于替换命令的表达式。</font></p><p><br />一个正则表达式最多可以有9个标注表达式, 按正规表达式的需要而定。<br />相应的替换表达式是 ^x , 替换范围x是1-9。例如：<br />If ^(h*o^) ^(f*s^) matches &ldquo;hello folks&rdquo;,<br />^2 ^1 would replace it with &ldquo;folks hello&rdquo;.</p><p>（hello folks 将被替换成 folks hello。）</p><p>注： ^ 是实际字符 ^不是Ctl + 键值。</p><p>例如：<br />m?n 匹配 &ldquo;man&rdquo;,&rdquo;men&rdquo;,&rdquo;min&rdquo; 但不匹配 &ldquo;moon&rdquo;.<br />t*t 匹配 &ldquo;test&rdquo;,&rdquo;tonight&rdquo; 和 &ldquo;tea time&rdquo; (the &ldquo;tea t&rdquo; portion) 但不匹配 &ldquo;tea<br />time&rdquo; (newline between &ldquo;tea &rdquo; and &ldquo;time&rdquo;).<br />Te+st 匹配 &ldquo;test&rdquo;,&rdquo;teest&rdquo;,&rdquo; teeeest &ldquo;等等。但是不匹配 &ldquo;tst&rdquo;。<br />[aeiou] 匹配每个小写元音。<br />[,.?] 匹配一文字的 &ldquo;,&rdquo;，&rdquo;.&rdquo;或 &ldquo;?&rdquo;。<br />[0-9, a-z] 匹配任何数位，或小写字母。<br />[~0-9] 除了数字以外匹配任何字符 (~ 意味着&rdquo;不&rdquo;)</p><p>你按如下方式可以查找一个表达式A或 B ：</p><p>&ldquo;^{John^}^{Tom^}&rdquo;</p><p>这将在找John或Tom的出现。应该在 2 个表达式之间没有任何东西。</p><p>你可以在同一搜索中按如下方式组合A or B and C or D：</p><p>&ldquo;^{John^}^{Tom^}^{Smith^}^{Jones^}&rdquo;</p><p>这将在John or Tom 后面找 Smith or Jones。</p><p><strong>语法二：&rdquo;Unix&rdquo;句法类型的正则表达式</strong></p><p>符号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能<br />\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标记下一个字符作为一个特殊的字符。<br />&quot;n&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配字符&quot;n&quot;。&quot;n&quot; 一个换行符或换行符字符。<br />^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配/定位行的开始。<br />$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配/定位行的尾。<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配前面的字符零次或多次。例<br />+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配前面的字符一次或多次。例<br />.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配除了一个换行符字符匹配任何单个的字符。<br />(expression)标注用于替换命令的表达式。一个正则表达式根据需要，最多可以有9个标注表达式。相应的代替表达式是 x , x的范围是 1-9 。<br />例如：<br />If (h.*o) (f.*s) matches &quot;hello folks&quot;, <br />2 1 would replace it with &quot;folks hello&quot;.<br />（hello folks 将被替换成 folks hello。）</p><p>[xyz]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个字符集。匹配在方括号之间的任何字符。<br />[^xyz]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个否定的字符集。不匹配在方括号之间的任何字符。<br />\d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个数字字符。等价于[0-9]。<br />\D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个非数字字符。等价于[^0-9]。<br />\f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个换页字符。<br />\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个换行字符。<br />\r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个回车符字符。<br />\s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何空白的空格, 标签, 换页, 包括空格等等，但不匹配换行符。<br />\S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何非空白的字符，但不匹配换行符。<br />\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个标签TAB字符。<br />\v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配一个垂直的标签字符。<br />\w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何词语字符包括下划线。<br />\W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配任何非词语字符字符。<br />注： ^ 是实际字符 ^不是Ctl + 键值。</p><p>例如：<br />m.n 匹配 &ldquo;man&rdquo;,&rdquo;men&rdquo;,&rdquo;min&rdquo; 但不匹配 &ldquo;moon&rdquo;.<br />t+t 匹配 &ldquo;test&rdquo;,&rdquo;tonight&rdquo; 和 &ldquo;tea time&rdquo; (the &ldquo;tea t&rdquo; portion) 但不匹配 &ldquo;tea<br />time&rdquo; (newline between &ldquo;tea &rdquo; and &ldquo;time&rdquo;).<br />Te*st 匹配 &ldquo;test&rdquo;,&rdquo;teest&rdquo;,&rdquo; teeeest &ldquo;等等。但是不匹配 &ldquo;tst&rdquo;。<br />[aeiou] 匹配每个小写元音。<br />[,.?] 匹配一文字的 &ldquo;,&rdquo;，&rdquo;.&rdquo;或 &ldquo;?&rdquo;。<br />[0-9,a-z] 匹配任何数位，或小写字母。<br />[^0-9] 除了数字以外匹配任何字符 (~ 意味着&rdquo;不&rdquo;)</p><p>你按如下方式可以查找一个表达式A或 B ：</p><p>&ldquo;(John)|(Tom)&rdquo;</p><p>这将在找John或Tom的出现。应该在 2 个表达式之间没有任何东西。</p><p>你可以在同一搜索中按如下方式组合A or B and C or D：</p><p>&ldquo;(John|Tom) (Smith|Jones)&rdquo;</p><p>这将在John or Tom 后面找 Smith or Jones。</p><p>另外：</p><p>p 匹配 CR/LF ( 作为 rn 的一样 ) 作为DOS行结束符匹配</p><p>如果查找/替换功能中正则表达式没有选用，则替换字段中下列字符也是有效的：</p><p>符号 功能</p><p>^^ 匹配一个 &ldquo;^&rdquo; 字符<br />^s 替换为被选择 ( 加亮 ) 活跃的文件窗口的文章。<br />^c 替换为剪贴板的内容<br />^b 匹配一个页裂缝<br />^p 匹配一个换行符 ( CR/LF )( 段 )( DOS 文件)<br />^r 匹配一个换行符 ( CR 仅仅 )( 段 )( MAC 文件)<br />^n 匹配一个换行符 ( LF 仅仅 )( 段 )( UNIX 文件)<br />^t 匹配一个标签TAB字符</p><p><strong>下面是我要实现的一段代码查询替换的举例<br />我想把一个.lrc文件中的汉字去掉:</strong></p><p>[ti:046]<br />[ar:Book I]<br />[al:english900]<br />[la:zh]<br />[by:]<br />[00:00.00][4] Identifying objects.辨别物品<br />[00:00.00]<br />[00:00.01]What are these? 这些是什么？<br />[00:01.93]Those are books. 那些是书。<br />[00:03.87]Where are the books? 那些书在哪儿？<br />[00:06.13]There they are. 在那儿。<br />[00:08.68]These are my pencils. 这些是我的铅笔。<br />[00:12.00]Where are your pens? 你的那些钢笔在哪儿？<br />[00:14.85]They're over there. 在那里。<br />[00:17.48]Are these your pens? 这些是你的钢笔吗？<br />[00:20.04]Yes,they are. 是我的。<br />[00:22.63]Those are mine. 那些是我的。<br />[00:25.39]These are your books,aren't they? 这些书是你的，对不对？<br />[00:28.35]No,they aren't. 不，不是。<br />[00:31.07]They're not mine. 不是我的。<br />[00:33.39]These are mine,and those are yours. 这些是我的，而那些是你的。<br />[00:35.57]Those aren't your pens,are they? 那些钢笔不是你的，对吧？<br />[00:36.38]</p><p>点&quot;搜索&quot;-&gt;&quot;替换&quot;,选中&quot;正则表达式&quot;</p><p>查找：^([/./?]^) ?++$</p><p>替换为：^1</p><p>点&ldquo;全部替换&rdquo;，完成。</p><p>大家可以在今后的编码中尝试一下Ultraedit的正则表达式查找替换功能，非常简单快捷<br /></p><p>&nbsp;</p>]]></description><category>不用分类</category><comments>http://chensheng.net/post/6.html#comment</comments><wfw:comment>http://chensheng.net/</wfw:comment><wfw:commentRss>http://chensheng.net/feed.asp?cmt=6</wfw:commentRss><trackback:ping>http://chensheng.net/cmd.asp?act=tb&amp;id=6&amp;key=c4f05ef4</trackback:ping></item><item><title>修复新建菜单中的文本文件那一项</title><author>crazycs@163.com (cs)</author><link>http://chensheng.net/post/new_menu.html</link><pubDate>Wed, 29 Nov 2006 19:13:53 +0800</pubDate><guid>http://chensheng.net/post/new_menu.html</guid><description><![CDATA[<p>前几天系统刚刚重装，我就惊讶的发现，右键那个&ldquo;新建&rdquo;菜单中，竟然没有了&ldquo;文本文件&rdquo;那一项。</p><p>后来，实在是使用感到别扭---因为我一天都至少要用上好几回。只好在网上找了些资料，这才修复了他。</p><div class="UBBContent">将下面的文件做成.reg导入注册表即可。</div><div class="UBBContent"><br />Windows&nbsp;Registry&nbsp;Editor&nbsp;Version&nbsp;5.00&nbsp;<br /><br />[HKEY_CLASSES_ROOT\.txt]<br />@=&quot;txtfile&quot;<br />&quot;Content&nbsp;Type&quot;=&quot;text/plain&quot;<br /><br />[HKEY_CLASSES_ROOT\.txt\ShellNew]<br />&quot;NullFile&quot;=&quot;&quot;<br /><br />[HKEY_CLASSES_ROOT\txtfile]<br />@=&quot;文本文档&quot;<br /><br />[HKEY_CLASSES_ROOT\txtfile\shell\open\command]<br />@=&quot;NOTEPAD.EXE&nbsp;%1&quot;</div><div>&nbsp;</div><div>&nbsp;</div><div>-------------------------------------------------------------------------------------------------------------------</div><div>到了后来，查看这些注册表项，我才知道，原来是我安装那个emeditor才导致菜单项丢失。</div><div>（注@=，即是注册表中的默认值）</div><div>emeditor将</div><div>[HKEY_CLASSES_ROOT\.txt] 的默认值改成了emeditor.txt</div><div>而</div><div>[hkey_class_root\emeditor.txt]的默认值为空，因此在新建菜单项就无法显示了。</div><div>&nbsp;</div><div>于是我便将其默认值改成了&ldquo;绝密档案&quot;。</div><div>于是，我更可以随时创建&ldquo;绝密档案&rdquo;了。</div><div>PS：亦可以修改[hkey_class_root\txtfile]的默认值（如果你没有安装emeditor），效果都一样。</div><div>&nbsp;</div><img onload="ResizeImage(this,520)" src="http://chensheng.net/upload/200611291941125086.GIF" alt="" title=""/>]]></description><category>不用分类</category><comments>http://chensheng.net/post/new_menu.html#comment</comments><wfw:comment>http://chensheng.net/</wfw:comment><wfw:commentRss>http://chensheng.net/feed.asp?cmt=2</wfw:commentRss><trackback:ping>http://chensheng.net/cmd.asp?act=tb&amp;id=2&amp;key=9a21f603</trackback:ping></item></channel></rss>
