<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>九王爷的府邸 &#187; Font</title>
	<atom:link href="http://www.9wy.net/archives/tag/font/feed" rel="self" type="application/rss+xml" />
	<link>http://www.9wy.net</link>
	<description>王府重地，宵小回避</description>
	<lastBuildDate>Wed, 01 Sep 2010 03:41:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>OnlineBooks</title>
		<link>http://www.9wy.net/book_program</link>
		<comments>http://www.9wy.net/book_program#comments</comments>
		<pubDate>Fri, 20 Nov 2009 11:43:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[EMACS]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://9wy.net/?page_id=620</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/book_program/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]EMACS快捷键大全</title>
		<link>http://www.9wy.net/archives/599</link>
		<comments>http://www.9wy.net/archives/599#comments</comments>
		<pubDate>Sun, 15 Nov 2009 02:46:59 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[EMACS]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[GDB]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://9wy.net/?p=599</guid>
		<description><![CDATA[网上看到的，觉得非常不错，给转到这里来了 本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com C = Control M = Meta = Alt&#124;Esc Del = Backspace 基本快捷键(Basic) C-x C-f &#8220;find&#8221;文件, 即在缓冲区打开/新建一个文件 C-x C-s 保存文件 C-x C-w 使用其他文件名另存为文件 C-x C-v 关闭当前缓冲区文件并打开新文件 C-x i 在当前光标处插入文件 C-x b 新建/切换缓冲区 C-x C-b 显示缓冲区列表 C-x k 关闭当前缓冲区 C-z 挂起emacs C-X C-c 关闭emacs 光标移动基本快捷键(Basic Movement) C-f 后一个字符 C-b 前一个字符 C-p 上一行 C-n [...]]]></description>
			<content:encoded><![CDATA[<p>网上看到的，觉得非常不错，给转到这里来了<br />
本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com</p>
<p>C = Control<br />
M = Meta = Alt|Esc<br />
Del = Backspace</p>
<p>基本快捷键(Basic)<br />
C-x C-f &#8220;find&#8221;文件, 即在缓冲区打开/新建一个文件<br />
C-x C-s 保存文件<br />
C-x C-w 使用其他文件名另存为文件<br />
C-x C-v 关闭当前缓冲区文件并打开新文件<br />
C-x i 在当前光标处插入文件<br />
C-x b 新建/切换缓冲区<br />
C-x C-b 显示缓冲区列表<br />
C-x k 关闭当前缓冲区<br />
C-z 挂起emacs<br />
C-X C-c 关闭emacs</p>
<p>光标移动基本快捷键(Basic Movement)<br />
C-f 后一个字符<br />
C-b 前一个字符<br />
C-p 上一行<br />
C-n 下一行<br />
M-f 后一个单词<br />
M-b 前一个单词<br />
C-a 行首<br />
C-e 行尾<br />
C-v 向下翻一页<br />
M-v 向上翻一页<br />
M-< 到文件开头<br />
M-> 到文件末尾</p>
<p>编辑(Editint)<br />
M-n 重复执行后一个命令n次<br />
C-u 重复执行后一个命令4次<br />
C-u n 重复执行后一个命令n次<br />
C-d 删除(delete)后一个字符<br />
M-d 删除后一个单词<br />
Del 删除前一个字符<br />
M-Del 删除前一个单词<br />
C-k 移除(kill)一行</p>
<p>C-Space 设置开始标记 (例如标记区域)<br />
C-@ 功能同上, 用于C-Space被操作系统拦截的情况<br />
C-w 移除(kill)标记区域的内容<br />
M-w 复制标记区域的内容<br />
C-y 召回(yank)复制/移除的区域/行<br />
M-y 召回更早的内容 (在kill缓冲区内循环)<br />
C-x C-x 交换光标和标记</p>
<p>C-t 交换两个字符的位置<br />
M-t 交换两个单词的位置<br />
C-x C-t 交换两行的位置<br />
M-u 使从光标位置到单词结尾处的字母变成大写<br />
M-l 与M-u相反<br />
M-c 使从光标位置开始的单词的首字母变为大写</p>
<p>重要快捷键(Important)<br />
C-g 停止当前运行/输入的命令<br />
C-x u 撤销前一个命令<br />
M-x revert-buffer RETURN (照着这个输入)撤销上次存盘后所有改动<br />
M-x recover-file RETURN 从自动存盘文件恢复<br />
M-x recover-session RETURN 如果你编辑了几个文件, 用这个恢复</p>
<p>在线帮助(Online-Help)<br />
C-h c 显示快捷键绑定的命令<br />
C-h k 显示快捷键绑定的命令和它的作用<br />
C-h l 显示最后100个键入的内容<br />
C-h w 显示命令被绑定到哪些快捷键上<br />
C-h f 显示函数的功能<br />
C-h v 显示变量的含义和值<br />
C-h b 显示当前缓冲区所有可用的快捷键<br />
C-h t 打开emacs教程<br />
C-h i 打开info阅读器<br />
C-h C-f 显示emacs FAQ<br />
C-h p 显示本机Elisp包的信息</p>
<p>搜索/替换(Seach/Replace)<br />
C-s 向后搜索<br />
C-r 向前搜索<br />
C-g 回到搜索开始前的位置(如果你仍然在搜索模式中)<br />
M-% 询问并替换(query replace)</p>
<p>Space或y 替换当前匹配<br />
Del或n 不要替换当前匹配<br />
. 仅仅替换当前匹配并退出(替换)<br />
, 替换并暂停(按Space或y继续)<br />
! 替换以下所有匹配<br />
^ 回到上一个匹配位置<br />
RETURN或q 退出替换</p>
<p>使用正则表达式(Regular expression)搜索/替换<br />
可在正则表达式中使用的符号:<br />
^ 行首<br />
$ 行尾<br />
. 单个字符<br />
.* 任意多个(包括没有)字符<br />
\< 单词开头<br />
\> 单词结尾<br />
[] 括号中的任意一个字符(例如[a-z]表示所有的小写字母)</p>
<p>M C-s RETURN 使用正则表达式向后搜索<br />
M C-r RETURN 使用正则表达式向前搜索<br />
C-s 增量搜索<br />
C-s 重复增量搜索<br />
C-r 向前增量搜索<br />
C-r 重复向前增量搜索<br />
M-x query-replace-regexp 使用正则表达式搜索并替换</p>
<p>窗口命令(Window Commands)<br />
C-x 2 水平分割窗格<br />
C-x 3 垂直分割窗格<br />
C-x o 切换至其他窗格<br />
C-x 0 关闭窗格<br />
C-x 1 关闭除了光标所在窗格外所有窗格<br />
C-x ^ 扩大窗格<br />
M-x shrink-window 缩小窗格<br />
M C-v 滚动其他窗格内容<br />
C-x 4 f 在其他窗格中打开文件<br />
C-x 4 0 关闭当前缓冲区和窗格<br />
C-x 5 2 新建窗口(frame)<br />
C-x 5 f 在新窗口中打开文件<br />
C-x 5 o 切换至其他窗口<br />
C-x 5 0 关闭当前窗口</p>
<p>书签命令(Bookmark commands)<br />
C-x r m 在光标当前位置创建书签<br />
C-x r b 转到书签<br />
M-x bookmark-rename 重命名书签<br />
M-x bookmark-delete 删除书签<br />
M-x bookmark-save 保存书签<br />
C-x r l 列出书签清单</p>
<p>d 标记等待删除<br />
Del 取消删除标记<br />
x 删除被标记的书签<br />
r 重命名<br />
s 保存列表内所有书签<br />
f 转到当前书签指向的位置<br />
m 标记在多窗口中打开<br />
v 显示被标记的书签(或者光标当前位置的书签)<br />
t 切换是否显示路径列表<br />
w 显示当前文件路径<br />
q 退出书签列表</p>
<p>M-x bookmark-write 将所有书签导出至指定文件<br />
M-x bookmark-load 从指定文件导入书签</p>
<p>Shell<br />
M-x shell 打开shell模式<br />
C-c C-c 类似unix里的C-c(停止正在运行的程序)<br />
C-d 删除光标后一个字符<br />
C-c C-d 发送EOF<br />
C-c C-z 挂起程序(unix下的C-z)<br />
M-p 显示前一条命令<br />
M-n 显示后一条命令</p>
<p>DIRectory EDitor (dired)<br />
C-x d 打开dired<br />
C(大写C) 复制<br />
d 标记等待删除<br />
D 立即删除<br />
e或f 打开文件或目录<br />
g 刷新当前目录<br />
G 改变文件所属组(chgrp)<br />
k 从屏幕上的列表里删除一行(不是真的删除)<br />
m 用*标记<br />
n 光标移动到下一行<br />
o 在另一个窗格打开文件并移动光标<br />
C-o 在另一个窗格打开文件但不移动光标<br />
P 打印文件<br />
q 退出dired<br />
Q 在标记的文件中替换<br />
R 重命名文件<br />
u 移除标记<br />
v 显示文件内容<br />
x 删除有D标记的文件<br />
Z 压缩/解压缩文件<br />
M-Del 移除标记(默认为所有类型的标记)<br />
~ 标记备份文件(文件名有~的文件)等待删除<br />
# 标记自动保存文件(文件名形如#name#)等待删除<br />
*/ 用*标记所有文件夹(用C-u */n移除标记)<br />
= 将当前文件和标记文件(使用C-@标记而不是dired的m标记)比较<br />
M-= 将当前文件和它的备份比较<br />
! 对当前文件应用shell命令<br />
M-} 移动光标至下一个用*或D标记的文件<br />
M-{ 移动光标至上一个用*或D标记的文件<br />
% d 使用正则表达式标记文件等待删除<br />
% m 使用正则表达式标记文件为*<br />
+ 新建文件夹<br />
> 移动光标至后一个文件夹<br />
< 移动光标至前一个文件夹<br />
s 切换排序模式(按文件名/日期)</p>
<p>或许把这个命令归入这一类也很合适:<br />
M-x speedbar 打开一个独立的目录显示窗口</p>
<p>Telnet<br />
M-x telnet 打开telnet模式<br />
C-d 删除后一个字符或发送EOF<br />
C-c C-c 停止正在运行的程序(和unix下的C-c类似)<br />
C-c C-d 发送EOF<br />
C-c C-o 清除最后一个命令的输出<br />
C-c C-z 挂起正在运行的命令<br />
C-c C-u 移除前一行<br />
M-p 显示前一条命令</p>
<p>Text<br />
只能在text模式里使用<br />
M-s 使当前行居中<br />
M-S 使当前段落居中<br />
M-x center-region 使被选中的区域居中</p>
<p>宏命令(Macro-commands)<br />
C-x ( 开始定义宏<br />
C-x ) 结束定义宏<br />
C-x e 运行最近定义的宏<br />
M-n C-x e 运行最近定义的宏n次<br />
M-x name-last-kbd-macro 给最近定义的宏命名(用来保存)<br />
M-x insert-kbd-macro 将已命名的宏保存到文件<br />
M-x load-file 载入宏</p>
<p>编程(Programming)<br />
M C-\ 自动缩进光标和标记间的区域<br />
M-m 移动光标到行首第一个(非空格)字符<br />
M-^ 将当前行接到上一行末尾处<br />
M-; 添加缩进并格式化的注释<br />
C, C++和Java模式<br />
M-a 移动光标到声明的开始处<br />
M-e 移动光标到声明的结尾处<br />
M C-a 移动光标到函数的开始处<br />
M C-e 移动光标到函数的结尾处<br />
C-c RETURN 将光标移动到函数的开始处并标记到结尾处<br />
C-c C-q 根据缩进风格缩进整个函数<br />
C-c C-a 切换自动换行功能<br />
C-c C-d 一次性删除光标后的一串空格(greedy delete)</p>
<p>为了实现下面的一些技术, 你需要在保存源代码的目录里运行&#8221;etags<br />
*.c *.h *.cpp&#8221;(或者源代码的其他的扩展名)<br />
M-.(点) 搜索标签<br />
M-x tags-search ENTER 在所有标签里搜索(使用正则表达式)<br />
M-,(逗号) 在tags-search里跳至下一个匹配处<br />
M-x tags-query-replace 在设置过标签的所有文件里替换文本</p>
<p>GDB(调试器)<br />
M-x gdb 在另一个的窗格中打开gdb</p>
<p>版本控制(Version Control)<br />
C-x v d 显示当前目录下所有注册过的文件(show all registered files in this dir)<br />
C-x v = 比较不同版本间的差异(show diff between versions)<br />
C-x v u 移除上次提交之后的更改(remove all changes since last checkin)<br />
C-x v ~ 在不同窗格中显示某个版本(show certain version in different window)<br />
C-x v l 打印日志(print log)<br />
C-x v i 标记文件等待添加版本控制(mark file for version control add)<br />
C-x v h 给文件添加版本控制文件头(insert version control header into file)<br />
C-x v r 获取命名过的快照(check out named snapshot)<br />
C-x v s 创建命名的快照(create named snapshot)<br />
C-x v a 创建gnu风格的更改日志(create changelog file in gnu-style)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/599/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gentoo升级 xorg</title>
		<link>http://www.9wy.net/archives/564</link>
		<comments>http://www.9wy.net/archives/564#comments</comments>
		<pubDate>Fri, 19 Jun 2009 01:10:08 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://9wy.net/?p=564</guid>
		<description><![CDATA[不确定是不是中邪了，今天看到gentoo提示可以升级xorg以后就一直想者升级。终于没能挡 住诱惑，开始了升级。。。。1.3升级到1.5r3 查看了下需要更新的东西，好像很多哦，如下 simon@HomeC1 ~ $ sudo emerge -pv xorg-server These are the packages that would be merged, in order: Calculating dependencies&#8230; done! [ebuild U ] x11-proto/xproto-7.0.14 [7.0.10] 149 kB [ebuild U ] x11-proto/inputproto-1.5.0 [1.4.2.1] 57 kB [ebuild U ] x11-libs/xtrans-1.2.3 [1.0.3] USE=&#8221;-debug&#8221; 102 kB [ebuild U ] x11-proto/randrproto-1.2.2 [1.2.1] 62 kB [ebuild U ] [...]]]></description>
			<content:encoded><![CDATA[<p>不确定是不是中邪了，今天看到gentoo提示可以升级xorg以后就一直想者升级。终于没能挡<br />
住诱惑，开始了升级。。。。1.3升级到1.5r3</p>
<p>查看了下需要更新的东西，好像很多哦，如下<br />
simon@HomeC1 ~ $ sudo emerge -pv xorg-server</p>
<p>These are the packages that would be merged, in order:</p>
<p>Calculating dependencies&#8230; done!<br />
[ebuild U ] x11-proto/xproto-7.0.14 [7.0.10] 149 kB<br />
[ebuild U ] x11-proto/inputproto-1.5.0 [1.4.2.1] 57 kB<br />
[ebuild U ] x11-libs/xtrans-1.2.3 [1.0.3] USE=&#8221;-debug&#8221; 102 kB<br />
[ebuild U ] x11-proto/randrproto-1.2.2 [1.2.1] 62 kB<br />
[ebuild U ] x11-proto/xf86driproto-2.0.4 [2.0.3] 43 kB<br />
[ebuild U ] x11-proto/renderproto-0.9.3 [0.9.2] 53 kB<br />
[ebuild U ] x11-libs/libdrm-2.4.5 [2.3.0] USE=&#8221;-debug&#8221; 551 kB<br />
[ebuild N ] x11-proto/dri2proto-1.99.3 42 kB<br />
[ebuild U ] x11-libs/libXau-1.0.4 [1.0.3] USE=&#8221;-debug&#8221; 223 kB<br />
[ebuild U ] x11-proto/xextproto-7.0.4 [7.0.2] 78 kB<br />
[ebuild U ] x11-apps/rgb-1.0.3 [1.0.1] USE=&#8221;-debug&#8221; 102 kB<br />
[ebuild U ] x11-libs/libX11-1.1.5 [1.1.4] USE=&#8221;ipv6 xcb -debug&#8221; 1,548 kB<br />
[ebuild U ] x11-libs/libXext-1.0.4 [1.0.3] USE=&#8221;-debug&#8221; 259 kB<br />
[ebuild U ] x11-libs/libXrender-0.9.4 [0.9.2] USE=&#8221;-debug&#8221; 222 kB<br />
[ebuild U ] x11-libs/libXxf86vm-1.0.2 [1.0.1] USE=&#8221;-debug&#8221; 235 kB<br />
[ebuild U ] x11-libs/libXfont-1.3.4 [1.3.1-r1] USE=&#8221;ipv6 -debug&#8221; 558 kB<br />
[ebuild U ] media-libs/mesa-7.3-r1 [6.5.2-r1] USE=&#8221;nptl -debug -doc -motif -pic -xcb&#8221; VIDEO_CARDS=&#8221;-intel -mach64 -mga -none -r128 -radeon -s3virge -savage -sis (-sunffb) -tdfx -trident -via&#8221; 3,323 kB<br />
[ebuild U ] x11-apps/xauth-1.0.3 [1.0.2] USE=&#8221;ipv6 -debug&#8221; 110 kB<br />
[ebuild U ] x11-misc/xkeyboard-config-1.5 [1.1] 559 kB<br />
[ebuild U ] x11-apps/xinit-1.0.8-r4 [1.0.5-r1] USE=&#8221;hal pam -debug -minimal&#8221; 115 kB<br />
[ebuild U ] x11-drivers/xf86-input-mouse-1.4.0 [1.2.3] USE=&#8221;-debug&#8221; 286 kB<br />
[ebuild N ] x11-libs/libpciaccess-0.10.5 USE=&#8221;-debug -minimal&#8221; 255 kB<br />
[uninstall ] x11-base/xorg-server-1.3.0.0-r6 USE=&#8221;dri ipv6 nptl xorg -3dfx -debug -dmx -kdrive -minimal -sdl -xprint&#8221; INPUT_DEVICES=&#8221;keyboard mouse -acecad -aiptek -calcomp -citron -digitaledge -dmc -dynapro -elo2300 -elographics -evdev -fpit -hyperpen -jamstudio -joystick -magellan -microtouch -mutouch -palmax -penmount -spaceorb -summa -synaptics -tek4957 -ur98 -vmmouse -void -wacom&#8221; VIDEO_CARDS=&#8221;nvidia -apm -ark -chips -cirrus -cyrix -dummy -epson -fbdev -fglrx -glint -i128 -i740 (-impact) -imstt -intel -mach64 -mga -neomagic (-newport) -nsc -nv -r128 -radeon -rendition -s3 -s3virge -savage -siliconmotion -sis -sisusb (-sunbw2) (-suncg14) (-suncg3) (-suncg6) (-sunffb) (-sunleo) (-suntcx) -tdfx -tga -trident -tseng -v4l -vesa -vga -via -vmware -voodoo&#8221;<br />
[blocks b ] Tags cannot enclose tags x11-base/xorg-server-1.5 (<br />
晚上11：30现在已经开始更新了，希望能一次成功啥都不用改动 现场直播哦，不断更新</p>
<p>凌晨0：10分更新完了，重新生成配置文件<br />
，拷贝到/etc/Xorg里面startx启动，启动成功。但是键盘鼠标不能使用，搜索了一下需要安装 xf86-input-evdev，直接emerge xf86-input-evdev 安装好后就可以使用了。<br />
需要注意的是如果你把xdm或啥的桌面管理器添加到了启动里面，得在初始化时按I键进入交互模式，把这个给关掉，不然进去了就鼠标键盘都失灵，看你怎么加xf86-input-evdev</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/564/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>服务器备份一例</title>
		<link>http://www.9wy.net/archives/543</link>
		<comments>http://www.9wy.net/archives/543#comments</comments>
		<pubDate>Thu, 19 Mar 2009 00:58:02 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Server]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CMD]]></category>
		<category><![CDATA[Font]]></category>

		<guid isPermaLink="false">http://9wy.net/?p=543</guid>
		<description><![CDATA[这两天服务器无故死机2次，查看log又没有看到有什么异常。只能怀疑是日常的备份让服务器给down掉了。然后今天就将日常备份脚本给删除了，希望这样能看出是不是备份的时候出的问题。 顺便做个全备份。万一是硬件问题也不至于有太大问题。 * 数据库备份时现成的（做了个小脚本，每3天都会自动备份一个），直接下载到本地机器上。 * 网站数据备份，因为看到log比较大，而我又不需要log资源，所以就去掉了log 语句如下： nohup nice -n 19 tar &#8211;exclude var/www/web*/log/* -czvf /home/csbde/backup/webbak20090319.tar.gz /var/www/ &#62; /home/csbde/backup/webbak20090319.log 语句简单解释： 退出终端以后还会继续执行（nohup),设置运行级为最低的19（nice -n 19），这样就不会因为运行这个程序而影响其他程序了。排除目录（&#8211;exclude var/www/web*/log/*）注意var前面没有/，好像有/也没关系，会自动帮你去掉。压缩/var/www/（我的网站目录）到webbak20090319.tar.gz，并写入log到webbak20090319.log * 备份/etc目录 sudo nohup nice -n 19 tar cvzf bak_etc_20090320.tar.gz /etc &#62; bak_etc_20090320.log * 备份apache设置 sudo nohup nice -n 19 tar cvzf bak_apache_config_20090320.tar.gz /usr/local/apache2/conf &#62; bak_apache_config_20090320.log 小知识点： 优先级范围-20~19,-20为最高优先级,19为最低 显示命令名，进程id即优先级 ps -eo [...]]]></description>
			<content:encoded><![CDATA[<p>这两天服务器无故死机2次，查看log又没有看到有什么异常。只能怀疑是日常的备份让服务器给down掉了。然后今天就将日常备份脚本给删除了，希望这样能看出是不是备份的时候出的问题。<br />
<span> </span></p>
<p>顺便做个全备份。万一是硬件问题也不至于有太大问题。<br />
* 数据库备份时现成的（做了个小脚本，每3天都会自动备份一个），直接下载到本地机器上。<br />
* 网站数据备份，因为看到log比较大，而我又不需要log资源，所以就去掉了log<br />
语句如下：<br />
nohup nice -n 19 tar &#8211;exclude var/www/web*/log/* -czvf /home/csbde/backup/webbak20090319.tar.gz /var/www/ &gt; /home/csbde/backup/webbak20090319.log</p>
<p>语句简单解释：<br />
退出终端以后还会继续执行（nohup),设置运行级为最低的19（nice -n 19），这样就不会因为运行这个程序而影响其他程序了。排除目录（&#8211;exclude var/www/web*/log/*）注意var前面没有/，好像有/也没关系，会自动帮你去掉。压缩/var/www/（我的网站目录）到webbak20090319.tar.gz，并写入log到webbak20090319.log<br />
* 备份/etc目录</p>
<p>sudo nohup nice -n 19 tar cvzf bak_etc_20090320.tar.gz /etc &gt; bak_etc_20090320.log</p>
<p>* 备份apache设置<br />
sudo nohup nice -n 19 tar cvzf bak_apache_config_20090320.tar.gz /usr/local/apache2/conf &gt; bak_apache_config_20090320.log</p>
<p><span>小知识点：</span></p>
<p><span> </span></p>
<blockquote style="color: #009900;"><p><span style="font-size: x-small;">优先级范围-20~19,-20为最高优先级,19为最低<br />
显示命令名，进程id即优先级</span></p>
<p>ps -eo cmd,pid,nice</p>
<p>按优先级N执行程序</p>
<p>nice -n N command</p>
<p>调整已执行程序的优先级</p>
<p>renice [+N/-N] process</p>
<p>或者使用top进行直观的调整（运行top然后按r）</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/543/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 下更改GTK显示字体</title>
		<link>http://www.9wy.net/archives/209</link>
		<comments>http://www.9wy.net/archives/209#comments</comments>
		<pubDate>Wed, 05 Nov 2008 04:00:29 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[SoftWare]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[Pidgin]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/?p=252</guid>
		<description><![CDATA[前天将XP系统字体换成了雅黑，结果pidgin中文显示都是方框，猜想是这个雅黑字体闹的，google了一下，修改GTK+配置，使Windows XP下在GTK+ 中使用微软雅黑字体，然后就OK了。 如果一个 GTK+ 程序在 Windows 下运行，默认的中文字体是很难看的，下面就介绍如何在 GTK+ 中使用微软雅黑字体。 找到 &#8230;\etc\pango\pango.aliases 文件，添加一行： msyh = &#8220;Microsoft YaHei&#8221; 这就声明了雅黑字体，当然 Windows 字体目录下面应该有雅黑字体，Microsoft YaHei 就是字体的名字，比如还有 Simsun 宋体。我们把雅黑字体定义为一个字体族 msyh。 找到 &#8230;\gtk-2.0\gtkrc文件，将下 面内容加到后面 style &#8220;user-font&#8221; { font_name = &#8220;msyh 9&#8243; } widget_class &#8220;*&#8221; style &#8220;user-font&#8221; gtk-font-name=&#8221;msyh 9&#8243; 这样应用程序的字体就变成微软雅黑了。]]></description>
			<content:encoded><![CDATA[<p>前天将XP系统字体换成了雅黑，结果pidgin中文显示都是方框，猜想是这个雅黑字体闹的，google了一下，修改GTK+配置，使Windows XP下在GTK+ 中使用微软雅黑字体，然后就OK了。<br />
如果一个 GTK+ 程序在 Windows 下运行，默认的中文字体是很难看的，下面就介绍如何在 GTK+ 中使用微软雅黑字体。</p>
<p>找到 &#8230;\etc\pango\pango.aliases 文件，添加一行：</p>
<blockquote><p>msyh = &#8220;Microsoft YaHei&#8221;</p></blockquote>
<p>这就声明了雅黑字体，当然 Windows 字体目录下面应该有雅黑字体，Microsoft YaHei 就是字体的名字，比如还有 Simsun 宋体。我们把雅黑字体定义为一个字体族 msyh。</p>
<p>找到 &#8230;\gtk-2.0\gtkrc文件，将下 面内容加到后面</p>
<blockquote><p>style &#8220;user-font&#8221; {<br />
font_name = &#8220;msyh 9&#8243;<br />
}</p>
<p>widget_class &#8220;*&#8221; style &#8220;user-font&#8221;</p>
<p align="left">gtk-font-name=&#8221;msyh 9&#8243;</p>
</blockquote>
<p>这样应用程序的字体就变成微软雅黑了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/209/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>打造适合自己的System</title>
		<link>http://www.9wy.net/archives/179</link>
		<comments>http://www.9wy.net/archives/179#comments</comments>
		<pubDate>Tue, 14 Oct 2008 04:02:50 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[SoftWare]]></category>
		<category><![CDATA[CMD]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[GDB]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/?p=206</guid>
		<description><![CDATA[下面是自己的一些步骤仅供参考： 打造适合自己的系统 1 增加快捷键 1.1 增加Ctrl+R快捷命令行命令 1.1 建立sort目录，将常用操作快捷方式加入到其中（记得将名字改成简单易记的英文 名字），并将sort目录添加到系统环境path中。 2 软件设置 2.1 下载将firefox。 2.2 firefox AddonList 2.2.1 Ietab *2.2.2 vimperator 2.2.3 firebug *2.2.4 google toolbar(只用书签功能） 2.2.5 Adblock Plus 2.2.6 Autofile Forms *2.2.7 User Agent Switcher *2.2.8 Web Developer 2.2 下载VIM，下载自己的VIM配置文件 ?View Code VIM&#34; author: feelinglucky&#60;i.feelinglucky@gmail.com&#62; &#34; modify: Simon&#60;csbdess@gmail.com &#34; website: http://csbde.cn &#34; date: 2008-10-07 &#34; [...]]]></description>
			<content:encoded><![CDATA[<p>下面是自己的一些步骤仅供参考：<br />
打造适合自己的系统<br />
1 增加快捷键<br />
1.1 增加Ctrl+R快捷命令行命令<br />
1.1 建立sort目录，将常用操作快捷方式加入到其中（记得将名字改成简单易记的英文<br />
名字），并将sort目录添加到系统环境path中。<br />
<span id="more-179"></span><br />
2 软件设置</p>
<li>2.1 下载将firefox。
<li>2.2 firefox AddonList
<li>2.2.1 Ietab
<li>*2.2.2 vimperator
<li>2.2.3 firebug
<li>*2.2.4 google toolbar(只用书签功能）
<li>2.2.5 Adblock Plus
<li>2.2.6 Autofile Forms
<li>*2.2.7 User Agent Switcher
<li>*2.2.8 Web Developer</li>
<p>2.2 下载VIM，下载自己的VIM配置文件</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p179code2'); return false;">View Code</a> VIM</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1792"><td class="code" id="p179code2"><pre class="vim" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">&quot;  author: feelinglucky&lt;i.feelinglucky@gmail.com&gt;</span>
<span style="color: #adadad; font-style: italic;">&quot;  modify:  Simon&lt;csbdess@gmail.com</span>
<span style="color: #adadad; font-style: italic;">&quot; website: http://csbde.cn</span>
<span style="color: #adadad; font-style: italic;">&quot;    date: 2008-10-07</span>
<span style="color: #adadad; font-style: italic;">
&quot; 在处理未保存或只读文件的时候，弹出确认</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">confirm</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">linebreak</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">textwidth</span>=<span style="color: #000000; font-weight:bold;">80</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">nocompatible</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">backspace</span>=<span style="color: #000000; font-weight:bold;">2</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">history</span>=<span style="color: #000000; font-weight:bold;">400</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">ruler</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">number</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">hlsearch</span>
<span style="color: #adadad; font-style: italic;">&quot;逐字符高亮搜索词语</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">incsearch</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">expandtab</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">noerrorbells</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">novisualbell</span>
<span style="color: #adadad; font-style: italic;">&quot;高亮的时间</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">matchtime</span>=<span style="color: #000000; font-weight:bold;">5</span>
<span style="color: #adadad; font-style: italic;">&quot;close visual bell</span>
<span style="color: #804040;">set</span> t_vb=
<span style="color: #804040;">set</span> <span style="color: #668080;">foldmethod</span>=marker
<span style="color: #804040;">set</span> <span style="color: #668080;">tabstop</span>=<span style="color: #000000; font-weight:bold;">4</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">shiftwidth</span>=<span style="color: #000000; font-weight:bold;">4</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">nobackup</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">nowritebackup</span>
<span style="color: #adadad; font-style: italic;">&quot;set noswapfile</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">smarttab</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">smartindent</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">autoindent</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">cindent</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">wrap</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">autoread</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">cmdheight</span>=<span style="color: #000000; font-weight:bold;">1</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">showtabline</span>=<span style="color: #000000; font-weight:bold;">2</span>
<span style="color: #adadad; font-style: italic;">&quot;和其他程序共用剪贴(Windows)</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">clipboard</span><span style="color: #000000;">+</span>=unnamed
<span style="color: #804040;">set</span> <span style="color: #668080;">tabpagemax</span>=<span style="color: #000000; font-weight:bold;">20</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">laststatus</span>=<span style="color: #000000; font-weight:bold;">2</span>
<span style="color: #adadad; font-style: italic;">&quot;状态栏</span>
<span style="color: #adadad; font-style: italic;">&quot;set statusline=%F%m%r%h [%{&amp;ff}] [%Y] %w  %=[POS] %l,%c %=%P</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">statusline</span>= <span style="color: #000000;">%</span>F<span style="color: #000000;">%</span>m<span style="color: #000000;">%</span>r<span style="color: #000000;">%</span>h <span style="color: #000000;">%</span>w <span style="color: #000000;">&#91;</span>PWD<span style="color: #000000;">&#93;</span> <span style="color: #000000;">%</span>r<span style="color: #000000;">%</span><span style="color: #000000;">&#123;</span>CurrectDir<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#125;</span><span style="color: #000000;">%</span>h  <span style="color: #000000;">%</span>=<span style="color: #000000;">&#91;</span><span style="color: #000000;">%</span><span style="color: #000000;">&#123;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&amp;</span>fenc==<span style="color: #C5A22D;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">?&amp;</span>enc<span style="color: #000000;">:&amp;</span>fenc<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#91;</span>POS<span style="color: #000000;">&#93;</span> <span style="color: #000000;">%</span>l,<span style="color: #000000;">%</span>c <span style="color: #000000;">%</span>= <span style="color: #000000;">%</span>P
<span style="color: #C5A22D;">&quot;set statusline=%F%m%r%h%w [FORMAT=%{&amp;ff}] [TYPE=%Y] [POS=%l,%v][%p%%] %{strftime(&quot;</span><span style="color: #000000;">%</span>d<span style="color: #000000;">/%</span>m<span style="color: #000000;">/%</span>y <span style="color: #000000;">-</span> <span style="color: #000000;">%</span>H<span style="color: #000000;">:%</span>M<span style="color: #C5A22D;">&quot;)}[PWD] %r%{CurrectDir()}%h
function! CurrectDir()
    return substitute(getcwd(), &quot;</span><span style="color: #C5A22D;">&quot;, &quot;</span><span style="color: #C5A22D;">&quot;, &quot;</span>g<span style="color: #C5A22D;">&quot;)
endfunction
let g:calendar_diary=$VIM
&nbsp;
&quot;</span> 配置多语言环境
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;multi_byte&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">set</span> <span style="color: #668080;">encoding</span>=utf<span style="color: #000000;">-</span><span style="color: #000000; font-weight:bold;">8</span>
    <span style="color: #804040;">set</span> <span style="color: #668080;">termencoding</span>=utf<span style="color: #000000;">-</span><span style="color: #000000; font-weight:bold;">8</span>
    <span style="color: #804040;">set</span> <span style="color: #668080;">formatoptions</span><span style="color: #000000;">+</span>=mM
    <span style="color: #804040;">set</span> <span style="color: #668080;">fencs</span>=utf<span style="color: #000000;">-</span><span style="color: #000000; font-weight:bold;">8</span>,gbk
&nbsp;
    <span style="color: #804040;">if</span> v<span style="color: #000000;">:</span>lang =<span style="color: #000000;">~?</span> <span style="color: #C5A22D;">'^(zh)|(ja)|(ko)'</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">ambiwidth</span>=double
    <span style="color: #804040;">endif</span>
&nbsp;
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
        source <span style="color: #000000;">$</span>VIMRUNTIME<span style="color: #000000;">/</span>delmenu<span style="color: #000000;">.</span>vim
        source <span style="color: #000000;">$</span>VIMRUNTIME<span style="color: #000000;">/</span>menu<span style="color: #000000;">.</span>vim
        source <span style="color: #000000;">$</span>VIMRUNTIME<span style="color: #000000;">/</span>mswin<span style="color: #000000;">.</span>vim
        behave mswin
        language messages zh_CN<span style="color: #000000;">.</span>utf<span style="color: #000000;">-</span><span style="color: #000000; font-weight:bold;">8</span>
    <span style="color: #804040;">endif</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">echoerr</span> <span style="color: #C5A22D;">&quot;Sorry, this version of (g)vim was not compiled with +multi_byte&quot;</span>
<span style="color: #804040;">endif</span>
&nbsp;
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'gui_running'</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
        source <span style="color: #000000;">$</span>VIMRUNTIME<span style="color: #000000;">/</span>mswin<span style="color: #000000;">.</span>vim
    <span style="color: #804040;">endif</span>
<span style="color: #adadad; font-style: italic;">
    &quot; Always show file types in menu</span>
    <span style="color: #804040;">let</span> do_syntax_sel_menu=<span style="color: #000000; font-weight:bold;">1</span>
&nbsp;
    unmap  <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>Y<span style="color: #000000;">&gt;|</span>  <span style="color: #C5A22D;">&quot; &lt;c-Y&gt; for Redo is kept in insert mode
    iunmap &lt;c-A&gt;|  &quot;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>A<span style="color: #000000;">&gt;</span> <span style="color: #804040;">for</span> Select<span style="color: #000000;">-</span>All <span style="color: #668080;">is</span> kept <span style="color: #804040;">in</span> normal <span style="color: #25BB4D;">mode</span>
<span style="color: #adadad; font-style: italic;">    &quot; Key mapping to switch windows quickly (&lt;c-Tab&gt; is already mapped)</span>
    <span style="color: #804040;">nnoremap</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>S<span style="color: #000000;">-</span>Tab<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>W<span style="color: #000000;">&gt;</span>W
    inoremap <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>S<span style="color: #000000;">-</span>Tab<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>O<span style="color: #000000;">&gt;&lt;</span>c<span style="color: #000000;">-</span>W<span style="color: #000000;">&gt;</span>W
<span style="color: #adadad; font-style: italic;">
    &quot; 针对 Windows 的配置</span>
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">guifont</span>=新宋体<span style="color: #000000;">:</span>h10<span style="color: #000000;">:</span>cGB2312
<span style="color: #adadad; font-style: italic;">       &quot; set guifontwide=YaHei Consolas Hybrid:h10</span>
        <span style="color: #C5A22D;">&quot;au GUIEnter * simalt ~x &quot;</span> 最大化窗口
         <span style="color: #804040;">set</span> <span style="color: #668080;">lines</span>=<span style="color: #000000; font-weight:bold;">30</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">columns</span>=<span style="color: #000000; font-weight:bold;">85</span>
    <span style="color: #804040;">elseif</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;unix&quot;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">guifont</span>=
        <span style="color: #804040;">set</span> <span style="color: #668080;">guifontwide</span>=
    <span style="color: #804040;">elseif</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;mac&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">||</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;macunix&quot;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">guifont</span>=
        <span style="color: #804040;">set</span> <span style="color: #668080;">guifontwide</span>=
    <span style="color: #804040;">endif</span>
&nbsp;
    <span style="color: #804040;">colorscheme</span> desert
    <span style="color: #804040;">set</span> <span style="color: #668080;">guioptions</span>=
    <span style="color: #804040;">set</span> <span style="color: #668080;">guioptions</span><span style="color: #000000;">+</span>=r
    <span style="color: #804040;">set</span> <span style="color: #668080;">cursorline</span>
<span style="color: #804040;">else</span>
<span style="color: #adadad; font-style: italic;">    &quot; English messages only</span>
<span style="color: #adadad; font-style: italic;">    &quot;language messages en</span>
<span style="color: #adadad; font-style: italic;">
    &quot; set the default theme in no-GUI</span>
    <span style="color: #804040;">colorscheme</span> default
<span style="color: #adadad; font-style: italic;">
    &quot; Do not increase the windows width in taglist</span>
    <span style="color: #804040;">let</span> Tlist_Inc_Winwidth=<span style="color: #000000; font-weight:bold;">0</span>
<span style="color: #adadad; font-style: italic;">
    &quot; Set text-mode menu</span>
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'wildmenu'</span><span style="color: #000000;">&#41;</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">wildmenu</span>
        <span style="color: #804040;">set</span> cpoptions<span style="color: #000000;">-</span>=<span style="color: #000000;">&lt;</span>
        <span style="color: #804040;">set</span> <span style="color: #668080;">wildcharm</span>=<span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>Z<span style="color: #000000;">&gt;</span>
        nmap <span style="color: #000000;">&lt;</span>f10<span style="color: #000000;">&gt;</span>      <span style="color: #000000;">:</span>emenu <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>Z<span style="color: #000000;">&gt;</span>
        imap <span style="color: #000000;">&lt;</span>f10<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>O<span style="color: #000000;">&gt;:</span>emenu <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>Z<span style="color: #000000;">&gt;</span>
    <span style="color: #804040;">endif</span>
<span style="color: #adadad; font-style: italic;">
    &quot; Change encoding according to the current console code page</span>
    <span style="color: #804040;">if</span> <span style="color: #000000;">&amp;</span>termencoding <span style="color: #000000;">!</span>= <span style="color: #C5A22D;">''</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #000000;">&amp;</span>termencoding <span style="color: #000000;">!</span>= <span style="color: #000000;">&amp;</span>encoding
        <span style="color: #804040;">let</span> <span style="color: #000000;">&amp;</span>encoding=<span style="color: #000000;">&amp;</span>termencoding
        <span style="color: #804040;">let</span> <span style="color: #000000;">&amp;</span>fileencodings=<span style="color: #C5A22D;">'ucs-bom,utf-8,'</span> <span style="color: #000000;">.</span> <span style="color: #000000;">&amp;</span>encoding
    <span style="color: #804040;">endif</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;autocmd&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">filetype</span> <span style="color: #25BB4D;">plugin</span> <span style="color: #25BB4D;">indent</span> <span style="color: #25BB4D;">on</span>
<span style="color: #adadad; font-style: italic;">   &quot; autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number</span>
&nbsp;
    <span style="color: #804040;">augroup</span> vimrcEx
        <span style="color: #804040;">au</span><span style="color: #000000;">!</span>
        <span style="color: #804040;">autocmd</span> <span style="color: #25BB4D;">FileType</span> text <span style="color: #804040;">setlocal</span> <span style="color: #668080;">textwidth</span>=<span style="color: #000000; font-weight:bold;">80</span>
        <span style="color: #804040;">autocmd</span> <span style="color: #25BB4D;">BufReadPost</span> <span style="color: #000000;">*</span>
                     <span style="color: #804040;">if</span> <span style="color: #25BB4D;">line</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;'&quot;</span><span style="color: #C5A22D;">&quot;) &gt; 0 &amp;&amp; line(&quot;</span><span style="color: #C5A22D;">'&quot;&quot;) &lt;= line(&quot;$&quot;) |
                       exe &quot;normal g`&quot;&quot; |
                     endif
    augroup END
    function! AutoClose()
        :inoremap ( ()&lt;esc&gt;i
        :inoremap &quot; &quot;&quot;&lt;esc&gt;i
        :inoremap '</span> <span style="color: #C5A22D;">''</span><span style="color: #000000;">&lt;</span>esc<span style="color: #000000;">&gt;</span>i
        <span style="color: #000000;">:</span>inoremap <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span><span style="color: #000000;">&lt;</span>esc<span style="color: #000000;">&gt;</span>i
        <span style="color: #000000;">:</span>inoremap <span style="color: #000000;">&#91;</span> <span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&lt;</span>esc<span style="color: #000000;">&gt;</span>i
        <span style="color: #000000;">:</span>inoremap <span style="color: #000000;">&#41;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>r<span style="color: #000000;">&gt;</span>=ClosePair<span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">')'</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
        <span style="color: #000000;">:</span>inoremap <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>r<span style="color: #000000;">&gt;</span>=ClosePair<span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'}'</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
        <span style="color: #000000;">:</span>inoremap <span style="color: #000000;">&#93;</span> <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>r<span style="color: #000000;">&gt;</span>=ClosePair<span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">']'</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
    endf
&nbsp;
    <span style="color: #804040;">function</span><span style="color: #000000;">!</span> ClosePair<span style="color: #000000;">&#40;</span>char<span style="color: #000000;">&#41;</span>
        <span style="color: #804040;">if</span> <span style="color: #25BB4D;">getline</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'.'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#91;</span><span style="color: #25BB4D;">col</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'.'</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">-</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#93;</span> == a<span style="color: #000000;">:</span>char
            <span style="color: #804040;">return</span> <span style="color: #C5A22D;">&quot;&lt;right&gt;&quot;</span>
        <span style="color: #804040;">else</span>
            <span style="color: #804040;">return</span> a<span style="color: #000000;">:</span>char
        <span style="color: #804040;">endif</span>
    endf
<span style="color: #adadad; font-style: italic;">
    &quot;auto close for PHP and Javascript script</span>
    <span style="color: #804040;">au</span> <span style="color: #25BB4D;">FileType</span> php,c,cpp,h,python,javascript <span style="color: #804040;">exe</span> AutoClose<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #804040;">endif</span>
<span style="color: #adadad; font-style: italic;">&quot;Other Setting</span>
<span style="color: #adadad; font-style: italic;">&quot;语法高亮</span>
<span style="color: #804040;">syntax</span> <span style="color: #25BB4D;">on</span>
<span style="color: #adadad; font-style: italic;">&quot; key stock</span>
<span style="color: #adadad; font-style: italic;">
&quot;绑定自动补全的快捷键&lt;c-X&gt;&lt;c-O&gt;到&lt;leader&gt;;</span>
imap <span style="color: #000000;">&lt;</span>leader<span style="color: #000000;">&gt;</span>; <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>X<span style="color: #000000;">&gt;&lt;</span>c<span style="color: #000000;">-</span>O<span style="color: #000000;">&gt;</span>
<span style="color: #adadad; font-style: italic;">
&quot;ca日记h</span>
<span style="color: #804040;">map</span> ca <span style="color: #000000;">:</span>Calendar<span style="color: #000000;">&lt;</span>cr<span style="color: #000000;">&gt;</span>
<span style="color: #adadad; font-style: italic;">&quot;设定开关Taglist插件的快捷键为F4，可以在VIM的左侧栏列出函数列表等</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f4<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>Tlist<span style="color: #000000;">&lt;</span>cr<span style="color: #000000;">&gt;</span>
<span style="color: #adadad; font-style: italic;">
&quot;设置程序的编译运行和调试的快捷键F5，F6，Ctrl-F5</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f5<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span><span style="color: #804040;">call</span> CompileRun<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f7<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span><span style="color: #804040;">call</span> Debug<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f6<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span><span style="color: #804040;">call</span> Run<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #adadad; font-style: italic;">
&quot;设置代码格式化快捷键F3</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f2<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>s<span style="color: #000000;">/^////</span><span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>f3<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>s<span style="color: #000000;">/^////</span><span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #adadad; font-style: italic;">&quot;设置tab操作的快捷键，绑定:tabnew到&lt;leader&gt;t，绑定:tabn, :tabp到&lt;leader&gt;n,</span>
<span style="color: #adadad; font-style: italic;">&quot;&lt;leader&gt;p</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>leader<span style="color: #000000;">&gt;</span>t <span style="color: #000000;">:</span>tabnew<span style="color: #000000;">&lt;</span>cr<span style="color: #000000;">&gt;</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>leader<span style="color: #000000;">&gt;</span>n <span style="color: #000000;">:</span>tabn<span style="color: #000000;">&lt;</span>cr<span style="color: #000000;">&gt;</span>
<span style="color: #804040;">map</span> <span style="color: #000000;">&lt;</span>leader<span style="color: #000000;">&gt;</span>p <span style="color: #000000;">:</span>tabp<span style="color: #000000;">&lt;</span>cr<span style="color: #000000;">&gt;</span>
<span style="color: #adadad; font-style: italic;">
&nbsp;
&quot;使用&lt;leader&gt;e打开当前文件同目录中的文件</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;unix&quot;</span><span style="color: #000000;">&#41;</span>
<span style="color: #804040;">map</span> ,e <span style="color: #000000;">:</span>e <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>R<span style="color: #000000;">&gt;</span>=<span style="color: #25BB4D;">expand</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;%:p:h&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #C5A22D;">&quot;/&quot;</span> <span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #804040;">else</span>
<span style="color: #804040;">map</span> ,e <span style="color: #000000;">:</span>e <span style="color: #000000;">&lt;</span>c<span style="color: #000000;">-</span>R<span style="color: #000000;">&gt;</span>=<span style="color: #25BB4D;">expand</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;%:p:h&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #C5A22D;">&quot;&quot;</span> <span style="color: #668080;">&lt;cr&gt;</span>
<span style="color: #804040;">endif</span>
<span style="color: #adadad; font-style: italic;">
&quot;定义CompileRun函数，用来调用进行编译和运行</span>
<span style="color: #804040;">func</span> CompileRun<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;w&quot;</span>
<span style="color: #adadad; font-style: italic;">&quot;C程序</span>
<span style="color: #804040;">if</span> <span style="color: #000000;">&amp;</span>filetype == <span style="color: #C5A22D;">'c'</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!del %&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!rm %&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!gcc % -o %&lt;.exe&quot;</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!%&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!./%&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">else</span>
<span style="color: #804040;">if</span>    <span style="color: #000000;">&amp;</span>filetype == <span style="color: #C5A22D;">'cpp'</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!del %&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!rm %&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!g++ % -o %&lt;.exe&quot;</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!%&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!./%&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">endif</span>
endfunc
<span style="color: #adadad; font-style: italic;">&quot;结束定义CompileRun</span>
<span style="color: #adadad; font-style: italic;">
&quot;定义Run函数，用来调用进行编译和运行</span>
<span style="color: #804040;">func</span> Run<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;w&quot;</span>
<span style="color: #adadad; font-style: italic;">&quot;C程序</span>
<span style="color: #adadad; font-style: italic;">&quot;</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!%&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!./%&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
endfunc
<span style="color: #adadad; font-style: italic;">&quot;结束定义Run</span>
<span style="color: #adadad; font-style: italic;">
&nbsp;
&quot;定义Debug函数，用来调试程序</span>
<span style="color: #804040;">func</span> Debug<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;w&quot;</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">has</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;win32&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!del %&lt;.exe&quot;</span>
<span style="color: #804040;">else</span>
    <span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!rm %&lt;.exe&quot;</span>
<span style="color: #804040;">endif</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!g++ % -g -o %&lt;.exe&quot;</span>
<span style="color: #804040;">exec</span> <span style="color: #C5A22D;">&quot;!gdb %&lt;.exe&quot;</span>
endfunc
<span style="color: #adadad; font-style: italic;">&quot;结束定义Debug</span></pre></td></tr></table></div>

<p>2.3 下载TC，以及TC设置文件</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/179/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决PuTTY的中文乱码问题</title>
		<link>http://www.9wy.net/archives/136</link>
		<comments>http://www.9wy.net/archives/136#comments</comments>
		<pubDate>Sat, 29 Mar 2008 01:36:50 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/archives/153.html</guid>
		<description><![CDATA[本文综合了其他人的经验和自己的实践。 首先，设置 PuTTY： 打开putty,选择 Category中的Windows－－－&#62;Appearance－－－&#62; Font settings 把&#8221;字体&#8221;改为&#8221;Fixedsys&#8221;（或者其他中文字体），字符集为CHINEASE_GB2312 再选择 Category中的Windows－－－&#62;Translation －－－－&#62; Received data assumed to be &#8230; 把character设置为 &#8221;Use font encoding&#8221;  保存后登陆远程主机就可以了。如果显示仍然是乱码，说明远程主机的语言设置不是中文，这就需要更改远程主机的环境变量。 设置远程主机环境变量： 在远程主机的 home目录下，有一个.bash_profile文件，用来执行登入 shell 时要执行的命令。用文本编辑器编辑这个文件，加入以下语句： export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN:zh declare -x LANG=&#8221;zh_CN.UTF-8&#8243;JsBLinux联盟 declare -x LANGUAGE=&#8221;zh_CN:zh&#8221; 将远程主机的语言环境设置为中文环境。在远程主机保存文件后，执行： &#62;. .bash_profile 然后设置putty，选择 Category中的Windows－－－&#62;Translation －－－－&#62; Received data assumed to be &#8230; 把character设置为 &#8221;UTF-8&#8243; 这样就能显示中文了。 参考文献：   putty中文完全技巧 putty连接linux 中文输入及显示问题 Linux Shell简介 另外推荐一篇 PuTTY中文教程，非常详细。貌似也可以通过putty直接设置远程主机的语言环境，但是我没有实践过。 在vi中退格键不太正常，每次只是删除光标所在处的字符，然后把后面的字符向前挪一个 插入模式下就该这样的吧 而且小键盘的数字键也不对了 putty的设置问题 Terminal-&#62;Features-&#62;钩上 Disable application keypad mode]]></description>
			<content:encoded><![CDATA[<p>本文综合了其他人的经验和自己的实践。</p>
<p><strong>首先，设置 PuTTY</strong>：</p>
<p><font id="zoom" class="f14">打开putty,选择 Category中的Windows－－－&gt;Appearance－－－&gt; Font settings<br />
把&#8221;字体&#8221;改为&#8221;Fixedsys&#8221;（或者其他中文字体），字符集为CHINEASE_GB2312</font></p>
<p><font id="zoom" class="f14">再选择 Category中的Windows－－－&gt;Translation －－－－&gt; Received data assumed to be &#8230;</font></p>
<p><font id="zoom" class="f14">把character设置为 &#8221;Use font encoding&#8221;  </font></p>
<p>保存后登陆远程主机就可以了。如果显示仍然是乱码，说明远程主机的语言设置不是中文，这就需要更改远程主机的环境变量。</p>
<p><strong>设置远程主机环境变量：</strong></p>
<p>在远程主机的 home目录下，有一个<code>.bash_profile文件，用来执行</code><code>登入 shell 时要执行的命令。用文本编辑器编辑这个文件，加入以下语句：</code></p>
<p><font id="zoom" class="f14"><font color="#000000">export LANG=zh_CN.UTF-8</font></font></p>
<p><font id="zoom" class="f14"><font color="#000000">export LANGUAGE=zh_CN:zh</font></font></p>
<p><font id="zoom" class="f14"><font color="#000000">declare -x LANG=&#8221;zh_CN.UTF-8&#8243;<span style="display: none">JsBLinux联盟</span><br />
declare -x LANGUAGE=&#8221;zh_CN:zh&#8221;</font></font></p>
<p><font id="zoom" class="f14"><font color="#000000">将远程主机的语言环境设置为中文环境。在远程主机保存文件后，执行<strong>：</strong></font></font></p>
<p><font id="zoom" class="f14"><font color="#000000"><strong>&gt;. .bash_profile</strong></font></font></p>
<p><font id="zoom" class="f14"><font color="#000000">然后设置putty，<font id="zoom" class="f14">选择 Category中的Windows－－－&gt;Translation －－－－&gt; Received data assumed to be &#8230;</font></font></font></p>
<p><font id="zoom" class="f14"><font color="#000000"><font id="zoom" class="f14">把character设置为 &#8221;UTF-8&#8243;<br />
</font></font></font></p>
<p><font id="zoom" class="f14"><font color="#000000">这样就能显示中文了。</font></font></p>
<p><font id="zoom" class="f14"></font></p>
<p><strong>参考文献：</strong></p>
<ol>
<li> 
<a  href="http://chinaunix.net/jh/4/775098.html" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/chinaunix.net/jh/4/775098.html');" >putty中文完全技巧</a></li>
<li>
<a  href="http://www.xxlinux.com/linux/article/network/app/20071129/12995.html" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.xxlinux.com/linux/article/network/app/20071129/12995.html');" >putty连接linux 中文输入及显示问题</a></li>
<li>
<a  href="http://www.linuxsir.org/main/?q=node/135" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.linuxsir.org/main/');" >Linux Shell简介</a></li>
</ol>
<p>另外推荐一篇
<a  href="http://dzh001.blog.51cto.com/2767/40624" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/dzh001.blog.51cto.com/2767/40624');" >PuTTY中文教程</a>，非常详细。貌似也可以通过putty直接设置远程主机的语言环境，但是我没有实践过。</p>
<p>在vi中退格键不太正常，每次只是删除光标所在处的字符，然后把后面的字符向前挪一个<br />
<font color="Blue">插入模式下就该这样的吧</font><br />
而且小键盘的数字键也不对了<br />
<font color="Blue">putty的设置问题<br />
Terminal-&gt;Features-&gt;钩上 Disable application keypad mode<br />
</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/136/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用chenpress代替wordpress默认编辑器</title>
		<link>http://www.9wy.net/archives/127</link>
		<comments>http://www.9wy.net/archives/127#comments</comments>
		<pubDate>Mon, 24 Mar 2008 01:20:13 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/archives/143.html</guid>
		<description><![CDATA[WordPress默认的编辑器是 TinyMCE，是一个轻量级的基于Javascript的WYSIWYG编辑器。但是用惯了高级的RTE后，用TinyMCE感觉还是不爽，而且它的html编辑模式还会将换行自动转换成&#60;br /&#62;，这点几乎不可忍受（不知道能不能disable掉）。最终还是决定用 chenpress了。chenpress是一个基于 FCKeditor的 wordpress插件，FCKeditor可是大名鼎鼎啊。我找了好久，都没有找到一个理想的下载连接，通过google找到了这里：http://www.pixelficker.com/chenpress-wysiwyg-for-wordpress/，速度比较慢。为了方便，决定在自己这里host一份。 另外，因为最新的chenpress是3.1.1版本，内置的是FCKeditor2.1.1，对于firefox的支持还不是很完善，我又将内置的FCKeditor升级到最新的FCKeditor2.3.2。应该已经完全支持firefox了。 安装和升级chenpress的步骤如下: 1. 下载chenpress（下载连接见下）。（从哪里下都可以~但是我只用3.1.1的版本测试过~） 2. 将chenpress解压到wordpress的plugin目录中（一般是：wp-contentplugins）。将生成一个chenpress目录。 3. 在wordpress的plugin设置页将chenpress plugin激活（activate）。 4. 在users设置页，将Use the visual rich editor when writing勾掉（否则TinyMCE还会出来）。到这步，chenpress已经安装成功了，可以使用了。接下来，升级FCKeditor。 5. 下载 FCKeditor2.3.2。 6. 解压缩FCKeditor2.3.2.zip，覆盖chenpressFCKeditor目录下所有文件。 7. 修改chenpressFCKeditorfckconfig.js文件，加入这样一段代码： FCKConfig.ToolbarSets[&#34;WordPressTool&#34;] = [[&#8217;Source&#8217;,'-&#8217;,'NewPage&#8217;,'Templates&#8217;,'Preview&#8217;,'Print&#8217;],[&#8217;Cut&#8217;,'Copy&#8217;,'Paste&#8217;,'PasteText&#8217;,'PasteWord&#8217;],[&#8217;Undo&#8217;,'Redo&#8217;,'-&#8217;,'Find&#8217;,'Replace&#8217;,'SpellCheck&#8217;],[&#8217;Form&#8217;,'Checkbox&#8217;,'Radio&#8217;,'TextField&#8217;,'Textarea&#8217;,'Select&#8217;,'Button&#8217;,'ImageButton&#8217;,'HiddenField&#8217;],[&#8217;Link&#8217;,'Unlink&#8217;,'Anchor&#8217;],[&#8217;Image&#8217;,'Flash&#8217;,'Table&#8217;,'Rule&#8217;,'Smiley&#8217;,'SpecialChar&#8217;,'PageBreak&#8217;,'UniversalKey&#8217;],[&#8217;OrderedList&#8217;,'UnorderedList&#8217;,'Outdent&#8217;,'Indent&#8217;,'JustifyLeft&#8217;,'JustifyCenter&#8217;,'JustifyRight&#8217;,'JustifyFull&#8217;],[&#8217;Bold&#8217;,'Italic&#8217;,'Underline&#8217;,'StrikeThrough&#8217;,'Subscript&#8217;,'Superscript&#8217;,'RemoveFormat&#8217;],&#8216;/&#8217;,[&#8217;Style&#8217;,'FontFormat&#8217;,'FontName&#8217;,'FontSize&#8217;],[&#8217;TextColor&#8217;,'BGColor&#8217;],[&#8217;About&#8217;] ] ; 8. 在chenpress.php中，找到window.onload这个javascript的function，加入这段代码： if (!document.getElementById('content')) { return; } 9. Goal! 下载连接:]]></description>
			<content:encoded><![CDATA[<p>WordPress默认的编辑器是
<a title="TinyMCE"  href="http://tinymce.moxiecode.com/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/tinymce.moxiecode.com/');" >TinyMCE</a>，是一个轻量级的基于Javascript的WYSIWYG编辑器。但是用惯了高级的RTE后，用TinyMCE感觉还是不爽，而且它的html编辑模式还会将换行自动转换成&lt;br /&gt;，这点几乎不可忍受（不知道能不能disable掉）。最终还是决定用
<a title="chenpress"  href="http://groups-beta.google.com/group/ChenPress" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/groups-beta.google.com/group/ChenPress');" >chenpress</a>了。chenpress是一个基于
<a title="FCKeditor"  href="http://www.fckeditor.net/" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.fckeditor.net/');" >FCKeditor</a>的 wordpress插件，FCKeditor可是大名鼎鼎啊。我找了好久，都没有找到一个理想的下载连接，通过google找到了这里：http://www.pixelficker.com/chenpress-wysiwyg-for-wordpress/，速度比较慢。为了方便，决定在自己这里host一份。</p>
<p>另外，因为最新的chenpress是3.1.1版本，内置的是FCKeditor2.1.1，对于firefox的支持还不是很完善，我又将内置的FCKeditor升级到最新的FCKeditor2.3.2。应该已经完全支持firefox了。</p>
<p>安装和升级chenpress的步骤如下:</p>
<p>1. 下载chenpress（下载连接见下）。（从哪里下都可以~但是我只用3.1.1的版本测试过~） </p>
<p>2. 将chenpress解压到wordpress的plugin目录中（一般是：wp-contentplugins）。将生成一个chenpress目录。 </p>
<p>3. 在wordpress的plugin设置页将chenpress plugin激活（activate）。 </p>
<p>4. 在users设置页，将Use the visual rich editor when writing勾掉（否则TinyMCE还会出来）。到这步，chenpress已经安装成功了，可以使用了。接下来，升级FCKeditor。 </p>
<p>5. 下载
<a title="donwload FCKeditor"  href="http://www.fckeditor.net/download" target="_blank" onclick="javascript:pageTracker._trackPageview('/external/www.fckeditor.net/download');" >FCKeditor2.3.2</a>。 </p>
<p><span id="more-157"></span></p>
<p>6. 解压缩FCKeditor2.3.2.zip，覆盖chenpressFCKeditor目录下所有文件。 </p>
<p>7. 修改chenpressFCKeditorfckconfig.js文件，加入这样一段代码： </p>
<div class="code-div"><code>FCKConfig.ToolbarSets[&quot;WordPressTool&quot;] = [<br />[&rsquo;Source&rsquo;,'-&rsquo;,'NewPage&rsquo;,'Templates&rsquo;,'Preview&rsquo;,'Print&rsquo;],<br />[&rsquo;Cut&rsquo;,'Copy&rsquo;,'Paste&rsquo;,'PasteText&rsquo;,'PasteWord&rsquo;],<br />[&rsquo;Undo&rsquo;,'Redo&rsquo;,'-&rsquo;,'Find&rsquo;,'Replace&rsquo;,'SpellCheck&rsquo;],<br />[&rsquo;Form&rsquo;,'Checkbox&rsquo;,'Radio&rsquo;,'TextField&rsquo;,'Textarea&rsquo;,'Select&rsquo;,'Button&rsquo;,'ImageButton&rsquo;,'HiddenField&rsquo;],<br />[&rsquo;Link&rsquo;,'Unlink&rsquo;,'Anchor&rsquo;],<br />[&rsquo;Image&rsquo;,'Flash&rsquo;,'Table&rsquo;,'Rule&rsquo;,'Smiley&rsquo;,'SpecialChar&rsquo;,'PageBreak&rsquo;,'UniversalKey&rsquo;],<br />[&rsquo;OrderedList&rsquo;,'UnorderedList&rsquo;,'Outdent&rsquo;,'Indent&rsquo;,'JustifyLeft&rsquo;,'JustifyCenter&rsquo;,'JustifyRight&rsquo;,'JustifyFull&rsquo;],<br />[&rsquo;Bold&rsquo;,'Italic&rsquo;,'Underline&rsquo;,'StrikeThrough&rsquo;,'Subscript&rsquo;,'Superscript&rsquo;,'RemoveFormat&rsquo;],<br />&lsquo;/&rsquo;,<br />[&rsquo;Style&rsquo;,'FontFormat&rsquo;,'FontName&rsquo;,'FontSize&rsquo;],<br />[&rsquo;TextColor&rsquo;,'BGColor&rsquo;],<br />[&rsquo;About&rsquo;] ] ;</code></div>
<p>8. 在chenpress.php中，找到window.onload这个javascript的function，加入这段代码： </p>
<div class="code-div"><code>if (!document.getElementById('content')) { return; } </code></div>
<p>9. Goal! </p>
<p>下载连接:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/127/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>深入浅出之正则表达式（一）</title>
		<link>http://www.9wy.net/archives/123</link>
		<comments>http://www.9wy.net/archives/123#comments</comments>
		<pubDate>Sun, 23 Mar 2008 14:52:56 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/archives/135.html</guid>
		<description><![CDATA[前言：&#160;&#160;&#160;&#160;&#160;&#160;&#160;半年前我对正则表达式产生了兴趣，在网上查找过不少资料，看过不少的教程，最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好，可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现，结果就有了这篇文章。关于本文的名字，使用&#8220;深入浅出&#8221;似乎已经太俗。但是通读原文以后，觉得只有用&#8220;深入浅出&#8221;才能准确的表达出该教程给我的感受，所以也就不能免俗了。&#160;&#160;&#160;&#160;&#160;&#160; 本文是Jan Goyvaerts为RegexBuddy写的教程的译文，版权归原作者所有，欢迎转载。但是为了尊重原作者和译者的劳动，请注明出处！谢谢！ &#160; 1.&#160;&#160;&#160;&#160;&#160; 什么是正则表达式 基本说来，正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express。本文将用&#60;&#60;regex&#62;&#62;来表示一段具体的正则表达式。 一段文本就是最基本的模式，简单的匹配相同的文本。 &#160; 2.&#160;&#160;&#160;&#160;&#160; 不同的正则表达式引擎 正则表达式引擎是一种可以处理正则表达式的软件。通常，引擎是更大的应用程序的一部分。在软件世界，不同的正则表达式并不互相兼容。本教程会集中讨论Perl 5 类型的引擎，因为这种引擎是应用最广泛的引擎。同时我们也会提到一些和其他引擎的区别。许多近代的引擎都很类似，但不完全一样。例如.NET正则库，JDK正则包。 &#160; 3.&#160;&#160;&#160;&#160;&#160; 文字符号 最基本的正则表达式由单个文字符号组成。如&#60;&#60;a&#62;&#62;，它将匹配字符串中第一次出现的字符&#8220;a&#8221;。如对字符串&#8220;Jack is a boy&#8221;。&#8220;J&#8221;后的&#8220;a&#8221;将被匹配。而第二个&#8220;a&#8221;将不会被匹配。 正则表达式也可以匹配第二个&#8220;a&#8221;，这必须是你告诉正则表达式引擎从第一次匹配的地方开始搜索。在文本编辑器中，你可以使用&#8220;查找下一个&#8221;。在编程语言中，会有一个函数可以使你从前一次匹配的位置开始继续向后搜索。 类似的，&#60;&#60;cat&#62;&#62;会匹配&#8220;About cats and dogs&#8221;中的&#8220;cat&#8221;。这等于是告诉正则表达式引擎，找到一个&#60;&#60;c&#62;&#62;，紧跟一个&#60;&#60;a&#62;&#62;，再跟一个&#60;&#60;t&#62;&#62;。 要注意，正则表达式引擎缺省是大小写敏感的。除非你告诉引擎忽略大小写，否则&#60;&#60;cat&#62;&#62;不会匹配&#8220;Cat&#8221;。 &#160; &#183;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 特殊字符 对于文字字符，有11个字符被保留作特殊用途。他们是： [ ] ^ $ . &#124; ? * + ( ) 这些特殊字符也被称作元字符。 如果你想在正则表达式中将这些字符用作文本字符，你需要用反斜杠&#8220;&#8221;对其进行换码 (escape)。例如你想匹配&#8220;1+1=2&#8221;，正确的表达式为&#60;&#60;1+1=2&#62;&#62;. 需要注意的是，&#60;&#60;1+1=2&#62;&#62;也是有效的正则表达式。但它不会匹配&#8220;1+1=2&#8221;，而会匹配&#8220;123+111=234&#8221;中的&#8220;111=2&#8221;。因为&#8220;+&#8221;在这里表示特殊含义（重复1次到多次）。 在编程语言中，要注意，一些特殊的字符会先被编译器处理，然后再传递给正则引擎。因此正则表达式&#60;&#60;1+2=2&#62;&#62;在C++中要写成&#8220;1\+1=2&#8221;。为了匹配&#8220;C:temp&#8221;，你要用正则表达式&#60;&#60;C:\temp&#62;&#62;。而在C++中，正则表达式则变成了&#8220;C:\\temp&#8221;。 &#160; &#183;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 不可显示字符 可以使用特殊字符序列来代表某些不可显示字符： &#60;&#60;t&#62;&#62;代表Tab(0&#215;09) &#60;&#60;r&#62;&#62;代表回车符(0x0D) &#60;&#60;n&#62;&#62;代表换行符(0x0A) [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="ZH-CN" style="font-family: 宋体;">前言：</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span lang="ZH-CN" style="font-family: 宋体;">半年前我对正则表达式产生了兴趣，在网上查找过不少资料，看过不少的教程，最后在使用一个正则表达式工具</span>RegexBuddy<span lang="ZH-CN" style="font-family: 宋体;">时发现他的教程写的非常好，可以说是我目前见过最好的正则表达式教程。于是一直想把他翻译过来。这个愿望直到这个五一长假才得以实现，结果就有了这篇文章。关于本文的名字，使用</span>&ldquo;<span lang="ZH-CN" style="font-family: 宋体;">深入浅出</span>&rdquo;<span lang="ZH-CN" style="font-family: 宋体;">似乎已经太俗。但是通读原文以后，觉得只有用</span>&ldquo;<span lang="ZH-CN" style="font-family: 宋体;">深入浅出</span>&rdquo;<span lang="ZH-CN" style="font-family: 宋体;">才能准确的表达出该教程给我的感受，所以也就不能免俗了。</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span lang="ZH-CN" style="font-family: 宋体;">本文是</span>Jan Goyvaerts<span lang="ZH-CN" style="font-family: 宋体;">为</span>RegexBuddy<span lang="ZH-CN" style="font-family: 宋体;">写的教程的译文，版权归原作者所有，欢迎转载。但是为了尊重原作者和译者的劳动，请注明出处！谢谢！</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><strong style=""><span style="font-size: 18pt;"><o:p>&nbsp;</o:p></span></strong></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">什么是正则表达式</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">基本说来，正则表达式是一种用来描述一定数量文本的模式。</span>Regex<span lang="ZH-CN" style="font-family: 宋体;">代表</span>Regular Express<span lang="ZH-CN" style="font-family: 宋体;">。本文将用</span>&lt;&lt;regex&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">来表示一段具体的正则表达式。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">一段文本就是最基本的模式，简单的匹配相同的文本。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">不同的正则表达式引擎</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">正则表达式引擎是一种可以处理正则表达式的软件。通常，引擎是更大的应用程序的一部分。在软件世界，不同的正则表达式并不互相兼容。本教程会集中讨论</span>Perl 5 <span lang="ZH-CN" style="font-family: 宋体;">类型的引擎，因为这种引擎是应用最广泛的引擎。同时我们也会提到一些和其他引擎的区别。许多近代的引擎都很类似，但不完全一样。例如</span>.NET<span lang="ZH-CN" style="font-family: 宋体;">正则库，</span>JDK<span lang="ZH-CN" style="font-family: 宋体;">正则包。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">文字符号</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">最基本的正则表达式由单个文字符号组成。如</span>&lt;&lt;a&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">，它将匹配字符串中第一次出现的字符&ldquo;</span>a<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。如对字符串&ldquo;</span>Jack is a boy<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。&ldquo;</span>J<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;后的&ldquo;</span>a<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;将被匹配。而第二个&ldquo;</span>a<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;将不会被匹配。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">正则表达式也可以匹配第二个&ldquo;</span>a<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，这必须是你告诉正则表达式引擎从第一次匹配的地方开始搜索。在文本编辑器中，你可以使用&ldquo;查找下一个&rdquo;。在编程语言中，会有一个函数可以使你从前一次匹配的位置开始继续向后搜索。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">类似的，</span>&lt;&lt;cat&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">会匹配&ldquo;</span>About cats and dogs<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的&ldquo;</span>cat<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。这等于是告诉正则表达式引擎，找到一个</span>&lt;&lt;c&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">，紧跟一个</span>&lt;&lt;a&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">，再跟一个</span>&lt;&lt;t&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">要注意，正则表达式引擎缺省是大小写敏感的。除非你告诉引擎忽略大小写，否则</span>&lt;&lt;cat&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">不会匹配&ldquo;</span>Cat<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">特殊字符</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">对于文字字符，有</span>11<span lang="ZH-CN" style="font-family: 宋体;">个字符被保留作特殊用途。他们是：</span></p>
<p style="margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;" class="MsoNormal">[ ]  ^ $ . | ? * + ( )</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">这些特殊字符也被称作元字符。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">如果你想在正则表达式中将这些字符用作文本字符，你需要用反斜杠&ldquo;</span><span lang="ZH-CN" style="font-family: 宋体;">&rdquo;对其进行换码</span><span lang="ZH-CN"> </span>(escape)<span lang="ZH-CN" style="font-family: 宋体;">。例如你想匹配&ldquo;</span>1+1=2<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，正确的表达式为</span>&lt;&lt;1+1=2&gt;&gt;.</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">需要注意的是，</span>&lt;&lt;1+1=2&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">也是有效的正则表达式。但它不会匹配&ldquo;</span>1+1=2<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，而会匹配&ldquo;</span>123+111=234<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的&ldquo;</span>111=2<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。因为&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;在这里表示特殊含义（重复</span>1<span lang="ZH-CN" style="font-family: 宋体;">次到多次）。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在编程语言中，要注意，一些特殊的字符会先被编译器处理，然后再传递给正则引擎。因此正则表达式</span>&lt;&lt;1+2=2&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">在</span>C++<span lang="ZH-CN" style="font-family: 宋体;">中要写成&ldquo;</span>1\+1=2<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。为了匹配&ldquo;</span>C:temp<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，你要用正则表达式</span>&lt;&lt;C:\temp&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。而在</span>C++<span lang="ZH-CN" style="font-family: 宋体;">中，正则表达式则变成了&ldquo;</span>C:\\temp<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">不可显示字符</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">可以使用特殊字符序列来代表某些不可显示字符：</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;t&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表</span>Tab(0&#215;09)</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;r&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表回车符</span>(0x0D)</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;n&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表换行符</span>(0x0A)</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">要注意的是</span>Windows<span lang="ZH-CN" style="font-family: 宋体;">中文本文件使用&ldquo;</span>rn<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;来结束一行而</span>Unix<span lang="ZH-CN" style="font-family: 宋体;">使用&ldquo;</span>n<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">4.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">正则表达式引擎的内部工作机制</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">知道正则表达式引擎是如何工作的有助于你很快理解为何某个正则表达式不像你期望的那样工作。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">有两种类型的引擎：文本导向</span>(text-directed)<span lang="ZH-CN" style="font-family: 宋体;">的引擎和正则导向</span>(regex-directed)<span lang="ZH-CN" style="font-family: 宋体;">的引擎。</span>Jeffrey Friedl<span lang="ZH-CN" style="font-family: 宋体;">把他们称作</span>DFA<span lang="ZH-CN" style="font-family: 宋体;">和</span>NFA<span lang="ZH-CN" style="font-family: 宋体;">引擎。本文谈到的是正则导向的引擎。这是因为一些非常有用的特性，如&ldquo;惰性&rdquo;量词</span>(lazy quantifiers)<span lang="ZH-CN" style="font-family: 宋体;">和反向引用</span>(backreferences)<span lang="ZH-CN" style="font-family: 宋体;">，只能在正则导向的引擎中实现。所以毫不意外这种引擎是目前最流行的引擎。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">你可以轻易分辨出所使用的引擎是文本导向还是正则导向。如果反向引用或&ldquo;惰性&rdquo;量词被实现，则可以肯定你使用的引擎是正则导向的。你可以作如下测试：将正则表达式</span>&lt;&lt;regex|regex not&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">应用到字符串&ldquo;</span>regex not<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。如果匹配的结果是</span>regex<span lang="ZH-CN" style="font-family: 宋体;">，则引擎是正则导向的。如果结果是</span>regex not<span lang="ZH-CN" style="font-family: 宋体;">，则是文本导向的。因为正则导向的引擎是&ldquo;猴急&rdquo;的，它会很急切的进行表功，报告它找到的第一个匹配</span><span lang="ZH-CN"> </span><span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">正则导向的引擎总是返回最左边的匹配</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">这是需要你理解的很重要的一点：即使以后有可能发现一个&ldquo;更好&rdquo;的匹配，正则导向的引擎也总是返回最左边的匹配。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">当把</span>&lt;&lt;cat&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">应用到&ldquo;</span>He captured a catfish for his cat<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，引擎先比较</span>&lt;&lt;c&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">和&ldquo;</span>H<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，结果失败了。于是引擎再比较</span>&lt;&lt;c&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">和&ldquo;</span>e<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，也失败了。直到第四个字符，</span>&lt;&lt;c&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配了&ldquo;</span>c<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span>&lt;&lt;a&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配了第五个字符。到第六个字符</span>&lt;&lt;t&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">没能匹配&ldquo;</span>p<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，也失败了。引擎再继续从第五个字符重新检查匹配性。直到第十五个字符开始，</span>&lt;&lt;cat&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配上了&ldquo;</span>catfish<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的&ldquo;</span>cat<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，正则表达式引擎急切的返回第一个匹配的结果，而不会再继续查找是否有其他更好的匹配。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">5.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">字符集</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">字符集是由一对方括号&ldquo;</span>[]<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;括起来的字符集合。使用字符集，你可以告诉正则表达式引擎仅仅匹配多个字符中的一个。如果你想匹配一个&ldquo;</span>a<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;或一个&ldquo;</span>e<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，使用</span>&lt;&lt;[ae]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。你可以使用</span>&lt;&lt;gr[ae]y&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配</span>gray<span lang="ZH-CN" style="font-family: 宋体;">或</span>grey<span lang="ZH-CN" style="font-family: 宋体;">。这在你不确定你要搜索的字符是采用美国英语还是英国英语时特别有用。相反，</span>&lt;&lt;gr[ae]y&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">将不会匹配</span>graay<span lang="ZH-CN" style="font-family: 宋体;">或</span>graey<span lang="ZH-CN" style="font-family: 宋体;">。字符集中的字符顺序并没有什么关系，结果都是相同的。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">你可以使用连字符&ldquo;</span>-<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;定义一个字符范围作为字符集。</span>&lt;&lt;[0-9]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配</span>0<span lang="ZH-CN" style="font-family: 宋体;">到</span>9<span lang="ZH-CN" style="font-family: 宋体;">之间的单个数字。你可以使用不止一个范围。</span>&lt;&lt;[0-9a-fA-F] &gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配单个的十六进制数字，并且大小写不敏感。你也可以结合范围定义与单个字符定义。</span>&lt;&lt;[0-9a-fxA-FX]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配一个十六进制数字或字母</span>X<span lang="ZH-CN" style="font-family: 宋体;">。再次强调一下，字符和范围定义的先后顺序对结果没有影响。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">字符集的一些应用</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">查找一个可能有拼写错误的单词，比如</span>&lt;&lt;sep[ae]r[ae]te&gt;&gt; <span lang="ZH-CN" style="font-family: 宋体;">或</span><span lang="ZH-CN"> </span>&lt;&lt;li[cs]en[cs]e&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">查找程序语言的标识符，</span>&lt;&lt;A-Za-z_][A-Za-z_0-9]*&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span>(*<span lang="ZH-CN" style="font-family: 宋体;">表示重复</span>0<span lang="ZH-CN" style="font-family: 宋体;">或多次</span>)</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">查找</span>C<span lang="ZH-CN" style="font-family: 宋体;">风格的十六进制数</span>&lt;&lt;0[xX][A-Fa-f0-9]+&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span>(+<span lang="ZH-CN" style="font-family: 宋体;">表示重复一次或多次</span>)</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">取反字符集</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在左方括号&ldquo;</span>[<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;后面紧跟一个尖括号&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，将会对字符集取反。结果是字符集将匹配任何不在方括号中的字符。不像&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，取反字符集是可以匹配回车换行符的。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">需要记住的很重要的一点是，取反字符集必须要匹配一个字符。</span>&lt;&lt;q[^u]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">并不意味着：匹配一个</span>q<span lang="ZH-CN" style="font-family: 宋体;">，后面没有</span>u<span lang="ZH-CN" style="font-family: 宋体;">跟着。它意味着：匹配一个</span>q<span lang="ZH-CN" style="font-family: 宋体;">，后面跟着一个不是</span>u<span lang="ZH-CN" style="font-family: 宋体;">的字符。所以它不会匹配&ldquo;</span>Iraq<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的</span>q<span lang="ZH-CN" style="font-family: 宋体;">，而会匹配&ldquo;</span>Iraq is a country<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的</span>q<span lang="ZH-CN" style="font-family: 宋体;">和一个空格符。事实上，空格符是匹配中的一部分，因为它是一个&ldquo;不是</span>u<span lang="ZH-CN" style="font-family: 宋体;">的字符&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">如果你只想匹配一个</span>q<span lang="ZH-CN" style="font-family: 宋体;">，条件是</span>q<span lang="ZH-CN" style="font-family: 宋体;">后面有一个不是</span>u<span lang="ZH-CN" style="font-family: 宋体;">的字符，我们可以用后面将讲到的向前查看来解决。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">字符集中的元字符</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">需要注意的是，在字符集中只有</span>4<span lang="ZH-CN" style="font-family: 宋体;">个</span><span lang="ZH-CN"> </span><span lang="ZH-CN" style="font-family: 宋体;">字符具有特殊含义。它们是：&ldquo;</span>]  ^ -<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。&ldquo;</span>]<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;代表字符集定义的结束；&ldquo;</span><span lang="ZH-CN" style="font-family: 宋体;">&rdquo;代表转义；&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;代表取反；&ldquo;</span>-<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;代表范围定义。其他常见的元字符在字符集定义内部都是正常字符，不需要转义。例如，要搜索星号</span>*<span lang="ZH-CN" style="font-family: 宋体;">或加号</span>+<span lang="ZH-CN" style="font-family: 宋体;">，你可以用</span>&lt;&lt;[+*]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。当然，如果你对那些通常的元字符进行转义，你的正则表达式一样会工作得很好，但是这会降低可读性。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在字符集定义中为了将反斜杠&ldquo;</span><span lang="ZH-CN" style="font-family: 宋体;">&rdquo;作为一个文字字符而非特殊含义的字符，你需要用另一个反斜杠对它进行转义。</span>&lt;&lt;[\x]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">将会匹配一个反斜杠和一个</span>X<span lang="ZH-CN" style="font-family: 宋体;">。&ldquo;</span>]^-<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;都可以用反斜杠进行转义，或者将他们放在一个不可能使用到他们特殊含义的位置。我们推荐后者，因为这样可以增加可读性。比如对于字符&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，将它放在除了左括号&ldquo;</span>[<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;后面的位置，使用的都是文字字符含义而非取反含义。如</span>&lt;&lt;[x^]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">会匹配一个</span>x<span lang="ZH-CN" style="font-family: 宋体;">或</span>^<span lang="ZH-CN" style="font-family: 宋体;">。</span>&lt;&lt;[]x]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">会匹配一个&ldquo;</span>]<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;或&ldquo;</span>x<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span>&lt;&lt;[-x]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">或</span>&lt;&lt;[x-]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">都会匹配一个&ldquo;</span>-<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;或&ldquo;</span>x<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">字符集的简写</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">因为一些字符集非常常用，所以有一些简写方式。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;d&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表</span>&lt;&lt;[0-9]&gt;&gt;;</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;w&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表单词字符。这个是随正则表达式实现的不同而有些差异。绝大多数的正则表达式实现的单词字符集都包含了</span>&lt;&lt;A-Za-z0-9_]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;s&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">代表&ldquo;白字符&rdquo;。这个也是和不同的实现有关的。在绝大多数的实现中，都包含了空格符和</span>Tab<span lang="ZH-CN" style="font-family: 宋体;">符，以及回车换行符</span>&lt;&lt;rn&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">字符集的缩写形式可以用在方括号之内或之外。</span>&lt;&lt;sd&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配一个白字符后面紧跟一个数字。</span>&lt;&lt;[sd]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配单个白字符或数字。</span>&lt;&lt;[da-fA-F]&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">将匹配一个十六进制数字。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">取反字符集的简写</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;[S]&gt;&gt; = &lt;&lt;[^s]&gt;&gt;</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;[W]&gt;&gt; = &lt;&lt;[^w]&gt;&gt;</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;[D]&gt;&gt; = &lt;&lt;[^d]&gt;&gt;</p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">字符集的重复</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">如果你用&ldquo;</span>?*+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;操作符来重复一个字符集，你将会重复整个字符集。而不仅是它匹配的那个字符。正则表达式</span>&lt;&lt;[0-9]+&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">会匹配</span>837<span lang="ZH-CN" style="font-family: 宋体;">以及</span>222<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">如果你仅仅想重复被匹配的那个字符，可以用向后引用达到目的。我们以后将讲到向后引用。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">6.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">使用</span>?*</strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">或</span>+ </strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">进行重复</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal">?<span lang="ZH-CN" style="font-family: 宋体;">：告诉引擎匹配前导字符</span>0<span lang="ZH-CN" style="font-family: 宋体;">次或一次。事实上是表示前导字符是可选的。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal">+<span lang="ZH-CN" style="font-family: 宋体;">：告诉引擎匹配前导字符</span>1<span lang="ZH-CN" style="font-family: 宋体;">次或多次</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal">*<span lang="ZH-CN" style="font-family: 宋体;">：告诉引擎匹配前导字符</span>0<span lang="ZH-CN" style="font-family: 宋体;">次或多次</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal">&lt;[A-Za-z][A-Za-z0-9]*&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配没有属性的</span>HTML<span lang="ZH-CN" style="font-family: 宋体;">标签，&ldquo;</span>&lt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;以及&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;是文字符号。第一个字符集匹配一个字母，第二个字符集匹配一个字母或数字。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">我们似乎也可以用</span>&lt;[A-Za-z0-9]+&gt;<span lang="ZH-CN" style="font-family: 宋体;">。但是它会匹配</span>&lt;1&gt;<span lang="ZH-CN" style="font-family: 宋体;">。但是这个正则表达式在你知道你要搜索的字符串不包含类似的无效标签时还是足够有效的。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">限制性重复</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">许多现代的正则表达式实现，都允许你定义对一个字符重复多少次。词法是：</span>{min,max}<span lang="ZH-CN" style="font-family: 宋体;">。</span>min<span lang="ZH-CN" style="font-family: 宋体;">和</span>max<span lang="ZH-CN" style="font-family: 宋体;">都是非负整数。如果逗号有而</span>max<span lang="ZH-CN" style="font-family: 宋体;">被忽略了，则</span>max<span lang="ZH-CN" style="font-family: 宋体;">没有限制。如果逗号和</span>max<span lang="ZH-CN" style="font-family: 宋体;">都被忽略了，则重复</span>min<span lang="ZH-CN" style="font-family: 宋体;">次。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">因此</span>{0,}<span lang="ZH-CN" style="font-family: 宋体;">和</span>*<span lang="ZH-CN" style="font-family: 宋体;">一样，</span>{1<span lang="ZH-CN" style="font-family: 宋体;">，</span>}<span lang="ZH-CN" style="font-family: 宋体;">和</span>+ <span lang="ZH-CN" style="font-family: 宋体;">的作用一样。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">你可以用</span>&lt;&lt;b[1-9][0-9]{3}b&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配</span>1000~9999<span lang="ZH-CN" style="font-family: 宋体;">之间的数字</span>(<span lang="ZH-CN" style="font-family: 宋体;">&ldquo;</span>b<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;表示单词边界</span>)<span lang="ZH-CN" style="font-family: 宋体;">。</span>&lt;&lt;b[1-9][0-9]{2,4}b&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配一个在</span>100~99999<span lang="ZH-CN" style="font-family: 宋体;">之间的数字。</span></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">注意贪婪性</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">假设你想用一个正则表达式匹配一个</span>HTML<span lang="ZH-CN" style="font-family: 宋体;">标签。你知道输入将会是一个有效的</span>HTML<span lang="ZH-CN" style="font-family: 宋体;">文件，因此正则表达式不需要排除那些无效的标签。所以如果是在两个尖括号之间的内容，就应该是一个</span>HTML<span lang="ZH-CN" style="font-family: 宋体;">标签。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">许多正则表达式的新手会首先想到用正则表达式</span>&lt;&lt; &lt;.+&gt; &gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">，他们会很惊讶的发现，对于测试字符串，&ldquo;</span>This is a &lt;EM&gt;first&lt;/EM&gt; test<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，你可能期望会返回</span>&lt;EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">，然后继续进行匹配的时候，返回</span>&lt;/EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">但事实是不会。正则表达式将会匹配&ldquo;</span>&lt;EM&gt;first&lt;/EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。很显然这不是我们想要的结果。原因在于&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;是贪婪的。也就是说，&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;会导致正则表达式引擎试图尽可能的重复前导字符。只有当这种重复会引起整个正则表达式匹配失败的情况下，引擎会进行回溯。也就是说，它会放弃最后一次的&ldquo;重复&rdquo;，然后处理正则表达式余下的部分。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">和&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;类似，&ldquo;</span>?*<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;的重复也是贪婪的。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">深入正则表达式引擎内部</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">让我们来看看正则引擎如何匹配前面的例子。第一个记号是&ldquo;</span>&lt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，这是一个文字符号。第二个符号是&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，匹配了字符&ldquo;</span>E<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，然后&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;一直可以匹配其余的字符，直到一行的结束。然后到了换行符，匹配失败</span>(<span lang="ZH-CN" style="font-family: 宋体;">&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;不匹配换行符</span>)<span lang="ZH-CN" style="font-family: 宋体;">。于是引擎开始对下一个正则表达式符号进行匹配。也即试图匹配&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。到目前为止，&ldquo;</span>&lt;.+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;已经匹配了&ldquo;</span>&lt;EM&gt;first&lt;/EM&gt; test<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。引擎会试图将&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;与换行符进行匹配，结果失败了。于是引擎进行回溯。结果是现在&ldquo;</span>&lt;.+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配&ldquo;</span>&lt;EM&gt;first&lt;/EM&gt; tes<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。于是引擎将&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;与&ldquo;</span>t<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;进行匹配。显然还是会失败。这个过程继续，直到&ldquo;</span>&lt;.+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配&ldquo;</span>&lt;EM&gt;first&lt;/EM<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;与&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配。于是引擎找到了一个匹配&ldquo;</span>&lt;EM&gt;first&lt;/EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。记住，正则导向的引擎是&ldquo;急切的&rdquo;，所以它会急着报告它找到的第一个匹配。而不是继续回溯，即使可能会有更好的匹配，例如&ldquo;</span>&lt;EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。所以我们可以看到，由于&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;的贪婪性，使得正则表达式引擎返回了一个最左边的最长的匹配。</span></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">用懒惰性取代贪婪性</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">一个用于修正以上问题的可能方案是用&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;的惰性代替贪婪性。你可以在&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;后面紧跟一个问号&ldquo;</span>?<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;来达到这一点。&ldquo;</span>*<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，&ldquo;</span>{}<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;和&ldquo;</span>?<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;表示的重复也可以用这个方案。因此在上面的例子中我们可以使用&ldquo;</span>&lt;.+?&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。让我们再来看看正则表达式引擎的处理过程。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">再一次，正则表达式记号&ldquo;</span>&lt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;会匹配字符串的第一个&ldquo;</span>&lt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。下一个正则记号是&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。这次是一个懒惰的&ldquo;</span>+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;来重复上一个字符。这告诉正则引擎，尽可能少的重复上一个字符。因此引擎匹配&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;和字符&ldquo;</span>E<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，然后用&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配&ldquo;</span>M<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，结果失败了。引擎会进行回溯，和上一个例子不同，因为是惰性重复，所以引擎是扩展惰性重复而不是减少，于是&ldquo;</span>&lt;.+<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;现在被扩展为&ldquo;</span>&lt;EM<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。引擎继续匹配下一个记号&ldquo;</span>&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。这次得到了一个成功匹配。引擎于是报告&ldquo;</span>&lt;EM&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;是一个成功的匹配。整个过程大致如此。</span></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">惰性扩展的一个替代方案</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">我们还有一个更好的替代方案。可以用一个贪婪重复与一个取反字符集：&ldquo;</span>&lt;[^&gt;]+&gt;<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。之所以说这是一个更好的方案在于使用惰性重复时，引擎会在找到一个成功匹配前对每一个字符进行回溯。而使用取反字符集则不需要进行回溯。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">最后要记住的是，本教程仅仅谈到的是正则导向的引擎。文本导向的引擎是不回溯的。但是同时他们也不支持惰性重复操作。</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">7.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">使用&ldquo;</span>.</strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配几乎任意字符</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在正则表达式中，&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;是最常用的符号之一。不幸的是，它也是最容易被误用的符号之一。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配一个单个的字符而不用关心被匹配的字符是什么。唯一的例外是新行符。在本教程中谈到的引擎，缺省情况下都是不匹配新行符的。因此在缺省情况下，&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;等于是字符集</span>[^nr](Window)<span lang="ZH-CN" style="font-family: 宋体;">或</span>[^n]( Unix)<span lang="ZH-CN" style="font-family: 宋体;">的简写。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">这个例外是因为历史的原因。因为早期使用正则表达式的工具是基于行的。它们都是一行一行的读入一个文件，将正则表达式分别应用到每一行上去。在这些工具中，字符串是不包含新行符的。因此&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;也就从不匹配新行符。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">现代的工具和语言能够将正则表达式应用到很大的字符串甚至整个文件上去。本教程讨论的所有正则表达式实现都提供一个选项，可以使&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配所有的字符，包括新行符。在</span>RegexBuddy, EditPad Pro<span lang="ZH-CN" style="font-family: 宋体;">或</span>PowerGREP<span lang="ZH-CN" style="font-family: 宋体;">等工具中，你可以简单的选中&ldquo;点号匹配新行符&rdquo;。在</span>Perl<span lang="ZH-CN" style="font-family: 宋体;">中，&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;可以匹配新行符的模式被称作&ldquo;单行模式&rdquo;。很不幸，这是一个很容易混淆的名词。因为还有所谓&ldquo;多行模式&rdquo;。多行模式只影响行首行尾的锚定</span>(anchor)<span lang="ZH-CN" style="font-family: 宋体;">，而单行模式只影响&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">其他语言和正则表达式库也采用了</span>Perl<span lang="ZH-CN" style="font-family: 宋体;">的术语定义。当在</span>.NET Framework<span lang="ZH-CN" style="font-family: 宋体;">中使用正则表达式类时，你可以用类似下面的语句来激活单行模式：</span>Regex.Match(&ldquo;string&rdquo;,&rdquo;regex&rdquo;,RegexOptions.SingleLine)</p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">保守的使用点号&ldquo;</span>.<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">点号可以说是最强大的元字符。它允许你偷懒：用一个点号，就能匹配几乎所有的字符。但是问题在于，它也常常会匹配不该匹配的字符。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">我会以一个简单的例子来说明。让我们看看如何匹配一个具有&ldquo;</span>mm/dd/yy<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;格式的日期，但是我们想允许用户来选择分隔符。很快能想到的一个方案是</span>&lt;&lt;dd.dd.dd&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。看上去它能匹配日期&ldquo;</span>02/12/03<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。问题在于</span>02512703<span lang="ZH-CN" style="font-family: 宋体;">也会被认为是一个有效的日期。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;dd[-/.]dd[-/.]dd&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">看上去是一个好一点的解决方案。记住点号在一个字符集里不是元字符。这个方案远不够完善，它会匹配&ldquo;</span>99/99/99<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。而</span>&lt;&lt;[0-1]d[-/.][0-3]d[-/.]dd&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">又更进一步。尽管他也会匹配&ldquo;</span>19/39/99<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。你想要你的正则表达式达到如何完美的程度取决于你想达到什么样的目的。如果你想校验用户输入，则需要尽可能的完美。如果你只是想分析一个已知的源，并且我们知道没有错误的数据，用一个比较好的正则表达式来匹配你想要搜寻的字符就已经足够。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><strong style=""><o:p>&nbsp;</o:p></strong></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;" class="MsoNormal"><strong style=""><span style=""><span style="">8.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong style=""><span lang="ZH-CN" style="font-family: 宋体;">字符串开始和结束的锚定</span><o:p></o:p></strong></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">锚定和一般的正则表达式符号不同，它不匹配任何字符。相反，他们匹配的是字符之前或之后的位置。&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;匹配一行字符串第一个字符前的位置。</span>&lt;&lt;^a&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">将会匹配字符串&ldquo;</span>abc<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的</span>a<span lang="ZH-CN" style="font-family: 宋体;">。</span>&lt;&lt;^b&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">将不会匹配&ldquo;</span>abc<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的任何字符。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">类似的，</span>$<span lang="ZH-CN" style="font-family: 宋体;">匹配字符串中最后一个字符的后面的位置。所以</span>&lt;&lt;c$&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">匹配&ldquo;</span>abc<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;中的</span>c<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.25in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">锚定的应用</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在编程语言中校验用户输入时，使用锚定是非常重要的。如果你想校验用户的输入为整数，用</span>&lt;&lt;^d+$&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">用户输入中，常常会有多余的前导空格或结束空格。你可以用</span>&lt;&lt;^s*&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">和</span>&lt;&lt;s*$&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">来匹配前导空格或结束空格。</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">使用&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;和&ldquo;</span>$<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;作为行的开始和结束锚定</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">如果你有一个包含了多行的字符串。例如：&ldquo;</span>first linenrsecond line<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;</span>(<span lang="ZH-CN" style="font-family: 宋体;">其中</span>nr<span lang="ZH-CN" style="font-family: 宋体;">表示一个新行符</span>)<span lang="ZH-CN" style="font-family: 宋体;">。常常需要对每行分别处理而不是整个字符串。因此，几乎所有的正则表达式引擎都提供一个选项，可以扩展这两种锚定的含义。&ldquo;</span>^<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;可以匹配字串的开始位置</span>(<span lang="ZH-CN" style="font-family: 宋体;">在</span>f<span lang="ZH-CN" style="font-family: 宋体;">之前</span>)<span lang="ZH-CN" style="font-family: 宋体;">，以及每一个新行符的后面位置</span>(<span lang="ZH-CN" style="font-family: 宋体;">在</span>nr<span lang="ZH-CN" style="font-family: 宋体;">和</span>s<span lang="ZH-CN" style="font-family: 宋体;">之间</span>)<span lang="ZH-CN" style="font-family: 宋体;">。类似的，</span>$<span lang="ZH-CN" style="font-family: 宋体;">会匹配字串的结束位置</span>(<span lang="ZH-CN" style="font-family: 宋体;">最后一个</span>e<span lang="ZH-CN" style="font-family: 宋体;">之后</span>)<span lang="ZH-CN" style="font-family: 宋体;">，以及每个新行符的前面</span>(<span lang="ZH-CN" style="font-family: 宋体;">在</span>e<span lang="ZH-CN" style="font-family: 宋体;">与</span>nr<span lang="ZH-CN" style="font-family: 宋体;">之间</span>)<span lang="ZH-CN" style="font-family: 宋体;">。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">在</span>.NET<span lang="ZH-CN" style="font-family: 宋体;">中，当你使用如下代码时，将会定义锚定匹配每一个新行符的前面和后面位置：</span>Regex.Match(&quot;string&quot;, &quot;regex&quot;, RegexOptions.Multiline)</p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">应用：</span>string str = Regex.Replace(Original, &quot;^&quot;, &quot;&gt; &quot;, RegexOptions.Multiline)&#8211;<span lang="ZH-CN" style="font-family: 宋体;">将会在每行的行首插入&ldquo;</span>&gt; <span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p style="margin: 0in 0in 0pt 0.3in; text-indent: -0.25in;" class="MsoNormal"><span style="font-family: Symbol;"><span style="">&middot;<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: 宋体;">绝对锚定</span><o:p></o:p></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal">&lt;&lt;A&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">只匹配整个字符串的开始位置，</span>&lt;&lt;Z&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">只匹配整个字符串的结束位置。即使你使用了&ldquo;多行模式&rdquo;，</span>&lt;&lt;A&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">和</span>&lt;&lt;Z&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">也从不匹配新行符。</span></p>
<p style="margin: 0in 0in 0pt; text-indent: 0.3in;" class="MsoNormal"><span lang="ZH-CN" style="font-family: 宋体;">即使</span>Z<span lang="ZH-CN" style="font-family: 宋体;">和</span>$<span lang="ZH-CN" style="font-family: 宋体;">只匹配字符串的结束位置，仍然有一个例外的情况。如果字符串以新行符结束，则</span>Z<span lang="ZH-CN" style="font-family: 宋体;">和</span>$<span lang="ZH-CN" style="font-family: 宋体;">将会匹配新行符前面的位置，而不是整个字符串的最后面。这个&ldquo;改进&rdquo;是由</span>Perl<span lang="ZH-CN" style="font-family: 宋体;">引进的，然后被许多的正则表达式实现所遵循，包括</span>Java<span lang="ZH-CN" style="font-family: 宋体;">，</span>.NET<span lang="ZH-CN" style="font-family: 宋体;">等。如果应用</span>&lt;&lt;^[a-z]+$&gt;&gt;<span lang="ZH-CN" style="font-family: 宋体;">到&ldquo;</span>joen<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;，则匹配结果是&ldquo;</span>joe<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;而不是&ldquo;</span>joen<span lang="ZH-CN" style="font-family: 宋体;">&rdquo;。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>巧用find命令管理文件名为乱码的文件</title>
		<link>http://www.9wy.net/archives/72</link>
		<comments>http://www.9wy.net/archives/72#comments</comments>
		<pubDate>Sun, 13 Jan 2008 15:35:09 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Server]]></category>
		<category><![CDATA[Font]]></category>

		<guid isPermaLink="false">http://www.csbde.cn/archives/15.html</guid>
		<description><![CDATA[当文件名为乱码的时候，无法通过键盘输入文件名，所以在终端下就不能直接利用rm，mv等命令管理文件了。 但是我们知道每个文件都有一个i节点号，我们可以考虑通过i节点号来管理文件。首先，我们要取得文件的 i节点号。这个可以通过ls命令的-i选项获得得。 -bash-3.00$ ls -i 41697812 a     32983551 di      32983554 ethnet.c  32983543 hard_link 32983542 de.c  32983544 ethnet  32983541 ethnet.h  32983543 kstat 每个文件名前面的数字就是文件的i节点号。有了文件的i节点号，我们就可以利用find命令的-inum选项配合 常用的文件管理命令进行文件管理了。例如，如果要删除di文件，命令如下： -bash-3.00$ find . -inum 32983551 -exec rm {} ; -bash-3.00$ ls a  de.c  ethnet  ethnet.c  ethnet.h  hard_link  kstat 看di文件被删除了。因为这个例子是在unix-center的机子上运行的，暂时没有文件名为乱码的文件做为示例， 但是道理是一样的，不影响我们的理解。 要重命名一个文件，命令也很简单，如下： -bash-3.00$ ls -i 32983542 de.c    32983554 ethnet.c  32983543 hard_link  32983545 [...]]]></description>
			<content:encoded><![CDATA[<p>当文件名为乱码的时候，无法通过键盘输入文件名，所以在终端下就不能直接利用rm，mv等命令管理文件了。<br />
但是我们知道每个文件都有一个i节点号，我们可以考虑通过i节点号来管理文件。首先，我们要取得文件的<br />
i节点号。这个可以通过ls命令的-i选项获得得。<span id="more-72"></span></p>
<p>-bash-3.00$ <font color="#003366"><font color="#000080">ls -i</font><br />
</font>41697812 a     32983551 di      32983554 ethnet.c  32983543 hard_link<br />
32983542 de.c  32983544 ethnet  32983541 ethnet.h  32983543 kstat</p>
<p>每个文件名前面的数字就是文件的i节点号。有了文件的i节点号，我们就可以利用find命令的-inum选项配合<br />
常用的文件管理命令进行文件管理了。例如，如果要删除di文件，命令如下：<br />
-bash-3.00$ <font color="#000080">find . -inum 32983551 -exec rm {} ;</font><br />
-bash-3.00$ <font color="#000080">ls<br />
</font>a  de.c  ethnet  ethnet.c  ethnet.h  hard_link  kstat</p>
<p>看di文件被删除了。因为这个例子是在unix-center的机子上运行的，暂时没有文件名为乱码的文件做为示例，<br />
但是道理是一样的，不影响我们的理解。</p>
<p>要重命名一个文件，命令也很简单，如下：<br />
-bash-3.00$ <font color="#000080">ls -i</font><br />
32983542 de.c    32983554 ethnet.c  32983543 hard_link  32983545 kstat.c<br />
32983544 ethnet  32983541 ethnet.h  32983543 kstat      32983681 sys_link<br />
-bash-3.00$ <font color="#000080">find . -inum 32983542 -exec mv {} di.c ;</font><br />
-bash-3.00$ <font color="#000080">ls -i</font><br />
32983542 di.c    32983554 ethnet.c  32983543 hard_link  32983545 kstat.c<br />
32983544 ethnet  32983541 ethnet.h  32983543 kstat      32983681 sys_link</p>
<p>看看，de.c文件被重命名为di.c了。<font color="#000080">特别要提一下的是，在find命令中的“{}”表示find命令找到的文件，在<br />
-exec选项执行mv命令的时候，会利用按i节点号找到的文件名替换掉“{}”。</font><br />
转自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1787582</p>
]]></content:encoded>
			<wfw:commentRss>http://www.9wy.net/archives/72/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
