最近几天,手头上的任务比较多,到今天才有足够时间,心情来抒写这份凝重的心情。。。。
4月30号(周三晚上)在同事旁边找了一间单间的,交了压金,决定5月24号(周六)搬进去
5月23号晚上去买了些生活用品,回到宿舍整理完快11点了,夜深了,一个人在宿舍,在这样的环境,
想着曾经往事,一起走过的风风雨雨,酸甜的味道,此时一起全部涌现在脑海里,让我克制不住我的情绪,我的眼泪。。。
或许晓明说的是没错,这事是迟早要做的,只是提早了。是的,但是此时的心情是难受,
真的很难受。想着要离开曾一起住了1361天(2004.09.01-2008.05.24)的宿舍,那更是难受!
210.34.5.86 yd2008 yd2008
第一句
如果我们之间有1000步的距离
你只要跨出第1步
我就会朝你的方向走其余的999步
第二句
通常愿意留下来跟你争吵的人
才是真正爱你的人
第三句
付出真心 才会得到真心
却也可能伤得彻底
保持距离 就能保护自己
却也注定永远寂寞
第四句
有时候 不是对方不在乎你
而是你把对方看得太重
第五句
朋友就是把你看透了 还能喜欢你的人
第六句
就算是believe 中间也藏了一个lie
第七句
真正的好朋友
并不是在一起就有聊不完的话题
而是在一起 就算不说话
也不会感到尴尬
第八句
没有一百分的另一半
只有五十分的两个人
第九句
为你的难过而快乐的 是敌人
为你的快乐而快乐的 是朋友
为你的难过而难过的
就是那些 该放进心里的人
第十句
冷漠 有时候并不是无情
只是一种避免被伤害的工具
昨天5.12号迎来了2008Olympic火炬在厦门传递,公司放假了14:30-16:30
跟同事一起走到曾厝垵那边,在珍珠湾这边人太多了!
没有多少激动,只有在火炬手从身边跑过那一会,有点激动,呵呵!
来两张图片吧
停下脚步,发现最近走得太快了,应该放慢脚步,好好考虑考虑,好好休息会!
(想到昨晚的事,还是有那么点伤心,那么点失望,虽然那只是他一时的疏忽!)
光阴似箭,五一又到了,去年的这个时候正跟MM积极准备着去武夷山玩呢
去年的这几天晚上也是没怎么睡好,那时是因为激动呀,那是第一次去武夷山玩哦
而这几天也仍然睡不好,有点害怕,有点紧张,现在想想感觉有点太快了,真的有点怕怕
虽然知道紧张,害怕是没有用的,但每天晚上睡觉时还是会时时胡思乱想
希望一切都好!
祝所有朋友:五一快乐,心想事成!
(5月6号:五一回来了,一切都挺的好,紧张中享受幸福!
老爸对他的第一印象不错!老姐说他人挺老实的,也不错!
他家人也都挺好相处的,特别是他老爸挺疼俺的,接过他老爸亲手炸的地瓜饼那瞬间,
我真的感动万分!那一刻我从心底再次认定他了!
可能是因为跟他老妈语言勾通不方便,他老妈知道我不会说他那边的话,她又不会讲普通话,
显得拘束了很多,呵呵!)
经典语录TOP50
TOP1
人生的最大遗憾莫过于错误地坚持了不该坚持的,轻易地放弃了不该放弃的……
TOP2
新式morning call——生前何必久睡,死后自会长眠
TOP3
使你疲劳的不是远方的高山,而且是你鞋里面的一粒砂子
TOP4
有时在饭堂排队打饭时最大的欣慰不是前面的人越来越少而是后面等的人越来越多
TOP5
逆风的方向,更适合飞翔。我不怕万人阻挡,只怕自己投降
TOP6
酒,装在瓶里像水,喝到肚里闹鬼,说起话来走嘴,走起路来闪腿,半夜起来找水,早上起来后悔,中午酒杯一端还是挺美。
TOP7
你要不理我我就成包子了…而且还是天津最有名的…嘿嘿…
TOP8
妈妈说人最好不要错过两样东西,最后一班回家的车和一个深爱你的人
TOP9
我问一个在深圳工作了二十年的朋友:“如果你死后,你的墓志铭打算写点啥?”他说:“我解决了住房问题!”
TOP10
那天看到一位大妈在烧纸,边烧边嘟囔着:收到了全都买基金吧~~
TOP11
学问之美,在于使人一头雾水;诗歌之美,在于煽动男女出轨;女人之美,在于蠢得无怨无悔;男人之美,在于说谎说得白日见鬼
TOP12
如果你看到面前的阴影,别怕,那是因为你的背后有阳光
TOP13
诸葛亮出山前,也没带过兵!凭啥我就要工作经验?
TOP14
本人made in china,出厂日期1981年X月X日,长180cm,净重67kg。采用人工智能,各部分零件齐全,运转稳定,经二十多年的运行,属信得过产品。该产品手续齐全,无限期包退包换。现因发展需要,诚招志同道合者共同研制开发第二代产品,有意者请联系!
TOP15
干掉熊猫,我就是国宝!
TOP16
我能容忍身材是假的,脸是假的,胸是假的,臀是假的!!!但就是不容忍钱是假的!!!!
TOP17
脱机的人永远不知道联机的人等了她多久……
TOP18
紧 急 通 知:请准备一寸彩照,身份证复印件,学历复印件,个人简历,送到国家航天局,据可靠消息,为庆祝中秋,要招聘嫦娥!(自带兔子)
TOP19
命运负责洗牌,但是玩牌的是我们自己!
TOP20
问世间情为何物,不过一物降一物~
TOP21
如果中了一千万,我就去买30套房子租给别人,每天都去收一次房租。哇咔咔~~充实!
TOP22
上帝欲使人灭亡,必先使其疯狂;上帝欲使 人疯狂,必先使其买房
TOP23
我们走得太快,灵魂都跟不上了……
TOP24
问:你喜欢我哪一点?答:我喜欢你离我远一点!
TOP25
你看得见我打在屏幕上的字,却看不到我掉在键盘上的泪
TOP26
大师兄,你知道吗?二师兄的肉现在比师傅的都贵了
TOP27
很久很久以前,谎言和真实在河边洗澡,谎言先洗好,穿了真实的衣服离开, 真实却不肯穿谎言的衣服。后来,在人们的眼里,只有穿着真实衣服的谎言,却很难接受赤裸裸的真实
TOP28
忙碌是一种幸福,让我们没时间体会痛苦,奔波是一种快乐,让我们真实的感受生活,疲惫是一种享受,让我们无暇空虚,愿你的生活多姿多彩,永远开心!
TOP29
在非洲,瞪羚每天早上醒来时,他知道自己必须跑的比最快的狮子还快,否则就会被吃掉.狮子每天早上醒来时,他知道自己必须追上跑得最慢的瞪羚,否则就会被饿死.不管你是狮子还是瞪羚,当太阳升起时,你最好开始奔跑
TOP30
任盈盈教令狐冲弹琴,后来她爱上了令狐冲;岳灵珊教林平之武功,后来她爱上了林平之;小龙女教杨过武功,后来她爱上了杨过;老顽童教瑛姑武功,后来他爱上了瑛姑;但是,怎么没有一个教我课的女老师或是女助教爱上我呢?
TOP31
听说女人如衣服,兄弟如手足,回想起来,我竟然七手八脚地裸奔了19年!
TOP32
骑白马的不一定是王子,他可能是唐僧;带翅膀的也不一定是天使——妈妈说,那是鸟人
TOP33
爱一个人就是在拔通电话时,忽然不知道说什么好,原来只是想听听那熟悉的声音,原来真正想拔动的只是自已心底深处的一根弦
TOP34
老虎不发威,你当我是hello kitty啊!小驴不发威,你以为我是史努比啊!
TOP35
怀才就像怀孕,时间长了才能看出来
TOP36
来瓶82年的矿泉水
TOP37
过错是暂时的遗憾,而错过则是永远的遗憾!
TOP38
小时候我以为自己长大后可以拯救整个世界,等长大后才发现整个世界都拯救不了我.......
TOP39
跌倒了,爬起来再哭~~~
TOP40
上联:忆往昔,红米饭,南瓜汤,老婆一个,小孩一帮.下联:看今朝,白米饭,王八汤,小孩一个,老婆 一帮
TOP41
这世上最累的事情,莫过于眼睁睁看着自己的心碎了,还得自己动手把它粘起来
TOP42
事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的
TOP43
学士上面是硕士,硕士之后是博士,博士后面还有博士后,那博士后后面呢?如果你够勇敢再读两年那就是勇士,再读5年是壮士,再读7年是烈士,烈士以后呢?教育部会推出圣斗士,读满2年是青铜的 5年是白银的 7年是黄金的。毕业后愿意再读上去的女孩,有机会考出雅典娜!!!
TOP44
好的爱情是你透过一个男人看到世界,坏的爱情是你为了一个人舍弃世界
TOP45
今天你醒来,枕边躺着一只蚊子,旁边有一封遗嘱:我奋斗了一晚,你的脸皮厚的让我无颜活在这个世上。主啊!宽恕他吧,我是自杀的!
TOP46
上班无聊吗?抛硬币玩吧,正面就上网,反面就睡觉,竖起就工作,倾斜就努力工作,摔粉碎了就申请加班,如果摔出两枚,那就天天摔!
TOP47
同志们:别炒股,风险太大了,还是做豆腐最安全!做硬了是豆腐干,做稀了是豆腐脑,做薄了是豆腐皮,做没了是豆浆,放臭了是臭豆腐!稳赚不亏呀
TOP48
我终究没能飙得过那辆宝马,只能眼看着它在夕阳中绝尘而去,不是我的引擎不好,而是我的车链子掉了
TOP49
通知:近来秋寒已至,请同志们做好防御工作,有老公的抱老公 ,有老婆的抱老婆,暂时没有的请抱暖水瓶,实在没有暖水瓶的,请抱煤气罐(注意要点燃)。请勿乱抱鸡鸭等动物,以防禽流感。该南飞的南飞,该换毛的换毛,实在不行的就冬眠
TOP50
还能冲动,表示你还对生活有激情,总是冲动,表示你还不懂生活
安装配置指南
------------
一、下载SourceOffsite V3.53
官方下载地址,可以试用30天,试用期间无任何功能限制。
http://www.sourcegear.com/sos/downloads/SOS_Classic_3_5_3.zip
现在国内也有相关的中文版下载,本人使用没有什么区别,可能就是多一个VSS6.0。如果大家连VSS6.0都没有,就建议下载中文版。
二、安装SourceOffsite 服务器端
程序安装路径:
"下载保存路径\\SOS_Classic_3_5_3.zip\\vss6\\sos_server_winnt_professional_vss6.exe"。
安装过程结束后要提示重新启动系统,选择取消,不用重新启动也行,因为有的文章介绍说可以不重新启动。如果大家慎重一点,可以选择重新启动,本人就选择了重新启动。
三、配置SourceOffsite 服务器端
启动SourceOffsite 服务器端程序,程序路径为:"C:\\Program Files\\SourceOffSite\\ServerMgr.exe",也可以在Windows开始程序菜单中启动。其实 SourceOffsite 的用户指南里面有详细的软件使用及配置说明,在这里只能介绍几个重要的配置信息,其他设置使用默认值就可以。
1、网络端口设置(port)
打开程序的"General Settings"页面即可看到。
这里的端口只要不和其他网络端口冲突就行,一般默认值就不要修改了。
本人测试的端口号为:
unsecure port :8888,不用加密访问的端口。
secure port :8890,加密时访问的端口。
2、VSS数据库的设置(databases )
打开程序的"databases"页面,选择"Add...",出现添加数据库的对话框,选择已经存在的数据库srcsafe.ini,在DataBase 框中就会有数据库的完整路径,在DataBase Alias(数据库别名)中输入数据库名称也可以,为了测试方便本人输入了"net_vss"。
这里只要把要共享的数据库都选择出来就行,真正的配置管理员可能会有很多VSS数据库。
3、用户访问规则设置(users)
下面的规则设置方法,是网上搜索得到的很有效,在自带的用户指南中没有介绍。
举例的缺省规则:
0000 admin 192.168.3.0/24 1 来自 192.168.3.* 的 admin 必须加密访问
0001 admin 0.0.0.0/0 0 其它网段的 admin 用户拒绝访问
0002 * 192.168.3.0/24 2 其它来自 192.168.3.* 的用户可以访问
0003 * 0.0.0.0/0 1 其它网段的其它用户必须加密访问
每条规则有 4 个字段,第一个字段为规则优先级,按照 0000 0001 0002 ... 9999 排列
第二个字段为 用户名 匹配,如果为 * 表示全匹配。
第三个字段为 IP/子网 匹配。
192.168.3.1 表示匹配单机 192.168.3.1。
192.168.3.0/24 表示匹配 192.168.3.*
166.111.0.0/16 表示匹配清华校园网。
0.0.0.0/0 表示匹配所有的IP。
第四个字段为 控制项,可选为
0 表示拒绝访问
1 表示要求加密访问
2 表示可以访问
打开程序的"Users"页面,本人的测试规则为"0000 * 0.0.0.0/0 2"允许所有的用户不加密访问,把测试规则输入到"SourceSafe user name"框中即可。
大家设置时请按需要修改规则。
四、启动SourceOffsite 服务
打开Windows的系统服务找到SourceOffsite 启动服务即可。大家要注意以后修改任何的服务器端配置后都要重新启动SourceOffsite 服务才能生效。
五、安装SourceOffsite 客户端
为了后面好配置,测试功能,本人就在服务器端机器上安装客户端了,大家也可以这样先测试一下。
程序安装路径:
"下载保存路径\\SOS_Classic_3_5_3.zip\\Windows\\sos_client_professional.exe"。
安装过程中没的任何困难的地方,这里就不做过多介绍了。
六、使用SourceOffsite 客户端
使用步骤以本人的测试步骤为例:
1、连接服务器对话框,输入服务器地址"Server":127.0.0.1,端口号"Prot":8888,选择连接"Connect"。
2、VSS数据库登录对话框,输入VSS用户名"Username":t1,用户密码"Password":t1,VSS数据库别名"Database":net_vss。
3、验证正确后,就可以看到VSS数据库的内容了,关于VSS的操作就不做介绍了。
到此就成功地实现了VSS(Visual SourceSafe)的Internet访问。
Java视图上,左边“包资源管理器”,在要恢复的项目上点右键,会有一个菜单项,“从本地历史纪录复原(X)...”,英文是”Restore from Local History...”,点这个,就会弹出一个对话框,原来他们藏在这里了!对应于每一个删除的文件右边有相应的保存的日期,有更改就有保存,点对应的时间可以在下方看到代码,选中想要回复的文件,点恢复,就可以看到它乖乖的回到了原来的地方!
值得说明的是,Eclipse保存这些删掉的文件是有时间期限的,应该也有空间的限制。有些文件虽然可以看到文件名和更改时间,但是内容已经不存在了!这时会提示你状态无效或已经过期
正则表达式用来指定字符串模式。当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式<a href="...">来定位所有的超链接。
当然,为了指定一种模式,使用...这种记号是不够精确的。你需要精确地指定什么样的字符排列是一个合法的匹配。当描述某种模式时,你需要使用一种特殊的语法。
这里有一个简单例子。正则表达式
[Jj]ava.+
匹配下列形式的任何字符串:
例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”却不匹配。
如你所见,你需要了解一点语法来理解正则表达式的含意。幸运的是对于大多数的用途,使用少量的简单构造(straightforward constructs)就已足够。
- 字符类是可选自符的集合,用‘[’封装,比如[Jj],[0-9],[A-Za-z]或[^0-9]。这里的-表示范围(Unicode落在两个边界之间的所有字符),^表示求补(指定字符外的所有字符)。
- 有许多预定以的字符类,像\d(数字)或\p{Sc}(Unicode货币符号),见表12-8和12-9。
- 符号.匹配任何字符(可能行终止符(line terminators)除外,这依赖于标识设置(flag settings))
- \用作转义符,比如\.匹配一个句点,\\匹配一个反斜杠。
- 如果X和Y都是正则表达式,则XY表示“X的匹配后面跟着Y的匹配”。X|Y表示“任何X或Y的匹配”
- 可以将量词(quantifier)用到表达式中,X+ 表示X重复1次或多次,X* 表示X重复0次或多次,X? 表示X重复0次或1次
- 默认地,一个量词总是与使总体成功匹配的最长的可能重复匹配。可以加上后缀?(称为reluctant或stingy 匹配,用以匹配最小的重复数),和+(称为possessive或贪婪匹配,用以即使在总体匹配失败的情况下也匹配最大的重复数)来更改这种属性。
例如,字符串cab匹配[a-z]*ab,但不匹配[a-z]*+ab。第一种情况下,[a-z]*只匹配字符c,因此字符ab正好与模式的剩余部分匹配。但是贪婪版本[a-z]*+就与字符cab匹配,模式的剩余部分ab就匹配失败(,这样总体也就匹配失败)。
- 可以使用分组来定义子表达式。将分组封装在()中,如([+-]?)([0-9]+)。然后你可以让模式匹配符(the pattern matcher)返回每个分组的匹配,或者使用\n来回引分组(refer back to a group with \n),其中n是组号(以\1起始)
这里有一个稍微有点复杂却又很有用的正则表达式--它用来描述十进制和十六进制的整数。
[+-]?[0-9]+|0[Xx][0-9A-Fa-f]+
不幸的是,在使用正则表达式的各种程序和库之间,它的语法还没有完全标准化。对基本的构造上已达成了共识,但在细节方面有许多令人“抓狂”的区别(many maddening differences)。Java的正则表达式类使用了与Perl语言类似的语法,但也不尽相同。表12-8显示了Java语法的所有正则表达式构造。要了解更多关于正则表达式的信息,请参考Pattern类的API文档,或者Jeffrey E. F. Friedl的著作《Mastering Regular Expressions》(O'Reilly and Associates, 1997)(刚去第二书店查了一下,东南大学出版社已经引入了其第二版,影印)
表12-8 正则表达式语法
语法 解释
字符
c 字符c
\unnnn, \xnn, \0n, \0nn, \0nnn 带有十六或八进制值的代码单元
\0n 八进制0n代表的字符(0<=n<=7)
\0nn 八进制0nn代表的字符(0<=n<=7)
\0mnn 八进制0mnn代表的字符(0<=m<=3,0<=n<=7)
\xnn 十六进制 0xnn所代表的字符
\uhhhh 十六进制 0xhhhh所代表的字符
\t, \n, \r, \f, \a, \e 控制字符,依次是制表符,换行符,回车符,换页符,报警符和转义符
\cc 控制字符中出现的相应字符c
字符类
[C1C2. . .] C1、C2……中的任何字符。Ci可以是字符,字符范围(C1-C2)或者字符类。
[^. . .] 字符类的补集
[ . . . && . . .] 两个字符类的交集
预定义字符类
. 除行终止符外的任何字符(如果DOTALL标志置位,则表示任何字符)
\d 数字[0-9]
\D 非数字[^0-9]
\s 空白字符[\t\n\r\f\x0B]
\S 非空白字符
\w 单词字符[a-zA-Z0-9_]
\W 非单词字符
\p{name} 一个指定的字符类,见表12-9
\P{name} 指定字符类的补集
边界匹配符
^ $ 输入的开头和结尾(在多行模式(multiline mode)下是行的开头和结尾)
\b 单词边界
\B 非单词边界
\A 输入的开头
\z 输入的结尾
\Z 除最后行终止符之外的输入结尾
\G 上个匹配的结尾
量词
X? 可选的X(即X可能出现,也可能不出现)
X* X,可以重复0次或多次
X+ X,可以重复1次或多次
X{n} X{n,} X{n,m} X重复n次,至少重复n次,重复n到m次
量词后缀
? 设默认(贪婪)匹配为reluctant匹配
+ 设默认(贪婪)匹配为possessive匹配
集合操作
XY X的匹配后面跟着Y的匹配
X|Y X或Y的匹配
分组
(X) 匹配X并且在一个自动计数的分组中捕获它
\n 与第n个分组的匹配
转义
\c 字符c(必须不是字母)
\Q...\E 逐字地引用...
(?...) 特殊构造,看Pattern类的API
正则表达式的最简单使用是测试一个特殊的字符串是否与之匹配。这里有一个Java写的测试程序。首先从表示正则表达式的字符串构造一个Pattern对象。然后从该模式获得一个Matcher对象,并且调用它的matches()方法:
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) . . .
表12.9 预定义的字符类名(Predefined Character Class Names)
Lower 小写的ASII字符[a-z]
Upper 大写的ASCII字符[A-Z]
Alpha ASCII字母[A-Za-z]
Digit ASCII 数字 [0-9]
Alnum ASCII 字母或数字[A-Za-z0-9]
Xdigit 十六进制数字[0-9A-Fa-f]
Print or Graph 可打印的ASCII字符[\x21-\x7E]
Punct 非字母或数字ASCII [\p{Print}&&\P{Alnum}]
ASCII 所有ASCII字符 [\x00-\x7F]
Cntrl ASCII控制字符[\x00-\x1F]
Blank 空格符或制表符[ \t]
Space 空白符 [ \t\n\r\f\0x0B]
javaLowerCase 取决于Character.isLowerCase()的小写字符
javaUpperCase 取决于Character.isUpperCase()的大写字符
javaWhitespace 取决于Character.isWhitespace()的空白符
javaMirrored 取决于Character.isMirrored()的Mirrored(?)
InBlock 这里的Block是unicode字符的块名,用空格隔开,比如BasicLatin 或 Mongolian。块名列表 参考http://www.unicode.org
Category 或InCategory 这里的Category是Unicode字符的种类名,比如L(字母)或者Sc(货币符号)。种类 名列表参考http://www.unicode.org
matcher的输入可以是实现CharSequence接口的任何类对象,像String,StringBuilder或CharBuffer。
当编译模式时,可以设置一个或多个标志,例如
Pattern pattern = Pattern.compile(patternString,
Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);
下面六个标志都是支持的:
CASE_INSENSITIVE:匹配字符时与大小写无关,该标志默认只考虑US ASCII字符。
UNICODE_CASE:当与CASE_INSENSITIVE结合时,使用Unicode字母匹配
MULTILINE:^和$匹配一行的开始和结尾,而不是整个输入
UNIX_LINES: 当在多行模式下匹配^和$时,只将'\n'看作行终止符
DOTALL: 当使用此标志时,.符号匹配包括行终止符在内的所有字符
CANON_EQ: 考虑Unicode字符的规范等价
如果正则表达式包含分组,Matcher对象能够揭示分组边界。方法
int start(int groupIndex)
int end(int groupIndex)
返回某个特殊分组的起始索引和结尾后索引(past-the-end index )。
通过调用String group(int groupIndex),你可以简单地得到匹配的字符串。
第0个分组代表所有的分组,第一个实际分组的索引是1。调用groupCount来获得总的分组数。
使用开放圆括号来安排嵌套分组。例如,给定模式((1?[0-9]):([0-5][0-9]))[ap]m,并且输入11:59am,Matcher对象报告下列分组
((1?[0-9]):([0-5][0-9]))[ap]m
并输入
11:59am
matcher报告下列分组
分组索引 起始 结束 字符串
0 0 7 11;59am
1 0 5 11:59
2 0 2 11
3 3 5 59
例12-9提示输入一个模式和一个欲匹配的字符串。它将输出输入的字符串是否匹配模式。如果输入匹配包含分组的模式,程序将会使用圆括号来打印分组边界,如((11):(59))am
Example 12-9. RegexTest.java
import java.util.*;
import java.util.regex.*;
/**
This program tests regular expression matching.
Enter a pattern and strings to match, or hit Cancel
to exit. If the pattern contains groups, the group
boundaries are displayed in the match.
*/
public class RegExTest
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter pattern: ");
String patternString = in.nextLine();
Pattern pattern = null;
try
{
pattern = Pattern.compile(patternString);
}
catch (PatternSyntaxException e)
{
System.out.println("Pattern syntax error");
System.exit(1);
}
while (true)
{
System.out.println("Enter string to match: ");
String input = in.nextLine();
if (input == null || input.equals("")) return;
Matcher matcher = pattern.matcher(input);
if (matcher.matches())
{
System.out.println("Match");
int g = matcher.groupCount();
if (g > 0)
{
for (int i = 0; i < input.length(); i++)
{
for (int j = 1; j <= g; j++)
if (i == matcher.start(j))
System.out.print('(');
System.out.print(input.charAt(i));
for (int j = 1; j <= g; j++)
if (i + 1 == matcher.end(j))
System.out.print(')');
}
System.out.println();
}
}
else
System.out.println("No match");
}
}
}
通常地,你不希望匹配整个输入到某个正则表达式,而是希望在输入中找出一个或多个匹配的子字符串。使用Matcher类的find方法来寻找下一个匹配。如果它返回True,再使用start和end方法找出匹配的范围。
while (matcher.find())
{
int start = matcher.start();
int end = matcher.end();
String match = input.substring(start, end);
. . .
}
例12-10用到了这种机制。它在一个网页中定位所有的超文本引用并打印它们。为运行程序,在命令行提供一个URL,比如
java HrefMatch http://www.horstmann.com
Example 12-10. HrefMatch.java
1. import java.io.*;
2. import java.net.*;
3. import java.util.regex.*;
4.
5. /**
6. This program displays all URLs in a web page by
7. matching a regular expression that describes the
8. <a href=...> HTML tag. Start the program as
9. java HrefMatch URL
10. */
11. public class HrefMatch
12. {
13. public static void main(String[] args)
14. {
15. try
16. {
17. // get URL string from command line or use default
18. String urlString;
19. if (args.length > 0) urlString = args[0];
20. else urlString = "http://java.sun.com";
21.
22. // open reader for URL
23. InputStreamReader in = new InputStreamReader(new URL(urlString).openStream());
24.
25. // read contents into string buffer
26. StringBuilder input = new StringBuilder();
27. int ch;
28. while ((ch = in.read()) != -1) input.append((char) ch);
29.
30. // search for all occurrences of pattern
31. String patternString = "<a\\s+href\\s*=\\s*(\"[^\"]*\"|[^\\s>])\\s*>";
32. Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
33. Matcher matcher = pattern.matcher(input);
34.
35. while (matcher.find())
36. {
37. int start = matcher.start();
38. int end = matcher.end();
39. String match = input.substring(start, end);
40. System.out.println(match);
41. }
42. }
43. catch (IOException e)
44. {
45. e.printStackTrace();
46. }
47. catch (PatternSyntaxException e)
48. {
49. e.printStackTrace();
50. }
51. }
52. }
Matcher类的replaceAll方法用一个替换字符串代替出现的所有正则表达式的匹配。比如,下列指令用#替换所有数字序列
Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher(input);
String output = matcher.replaceAll("#");
替换字符串可以包含模式中的分组引用:$n被第n个分组替换。替换文本中出现$时,使用\$来包含它。
replaceFirst方法只替换模式的第一次出现。
最后讲一点,Pattern类有一个split方法,它类似于字符串tokenizer。它使用正则表达式匹配作边界,将输入分离成字符串数组。比如,下面的指令将输入分离成记号(token),
Pattern pattern = Pattern.compile("\\s*\\p{Punct}\\s*");
String[] tokens = pattern.split(input);
类
java.util.regex.Pattern 1.4
方法
static Pattern compile(String expression)
static Pattern compile(String expression, int flags)
编译正则表达式字符串到pattern对象用以匹配的快速处理
参数:
expression 正则表达式
flags 下列标志中的一个或多个 CASE_INSENSITIVE, UNICODE_CASE, MULTILINE, UNIX_LINES, DOTALL, and CANON_EQ
Matcher matcher(CharSequence input)
返回一个matcher对象,它可以用来在一个输入中定位模式匹配
String[] split(CharSequence input)
String[] split(CharSequence input, int limit)
将输入字符串分离成记号,并由pattern来指定分隔符的形式。返回记号数组。分隔符并不是记号的一部分。
参数:
input 分离成记号的字符串
limit 生成的最大字符串数。
类
java.util.regex.Matcher 1.4
方法
boolean matches()
返回输入是否与模式匹配
boolean lookingAt()
如果输入的起始匹配模式则返回True
boolean find()
boolean find(int start)
尝试查找下一个匹配,并在找到匹配时返回True
参数:
start 开始搜索的索引
int start()
int end()
返回当前匹配的起始位置和结尾后位置
String group()
返回当前匹配
int groupCount()
返回输入模式中的分组数
int start(int groupIndex)
int end(int groupIndex)
返回一个给定分组当前匹配中的起始位置和结尾后位置
参数:
groupIndex分组索引(从1开始),0表示整个匹配
String group(int groupIndex)
返回匹配一个给定分组的字符串
参数:
groupIndex
分组索引(从1开始),0表示整个匹配
String replaceAll(String replacement)
String replaceFirst(String replacement)
返回从matcher输入得到的字符串,但已经用替换表达式替换所有或第一个匹配
参数:
replacement 替换字符串
Matcher reset()
Matcher reset(CharSequence input)
复位mather状态。
有太多的话要说。。。。。。。。。
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
好好想想吧!
光阴似箭,07年扫墓情景还晰晰在目,今年清明有放假,又过完了一个清明节
4.4坐了最早一班车7:50分那班,(建都也刚好要回家,一起回去的)
三哥他们比我早到了10多分钟,在殡仪馆路口那等我了
一切好像都习惯了,没有那么悲伤,那么心痛。。。。。
只是头脑一片空白。。。。。
(这已经是第三次去老妈那扫墓了,但总觉得这不是事实!)
拜拜完后给炎煌挂了电话,(那会是从厦门来老家,所以没有给他带曾经答应他要带给他吃的,
下次我会特意给你带点哦,呵)聊了会有关墓地的事
下午三哥,萍,培,我四个人还去了奶奶那扫墓了,一开始我跟三哥两个相当用功的把墓地旁边的杂草锄了,
(因为太久没干活了,我的手皮一会就起泡了,没注意到,再过会,还没清除完,我手上的泡破了)
后部分那两个小家伙也帮了不少忙
等墓地看上去还不错,我们收工回家了
回家后去了叔叔那了,最近叔叔身体还不错,他说脚还是有点难受,可能是因为他不爱活动吧
经常在家坐着,叔叔比较不爱动
在叔叔家坐了20分钟左右,我回家了,回到家,赶紧打扫卫生
有点辛苦,但这一切我都习惯了
打扫完后准备晚餐了,在做饭时,银煜打电话说去他家吃饭,想想好像我都被去过他家呢,也就决定去他家
磳饭吃,呵呵
那晚他家里很多人,还见到清点他大哥,能辉他妈妈了,呵呵
第二天我们准备去爷爷那扫墓,爷爷的墓地相当远,不过,这次发现远倒是还可以,没之前想象的那么远,
就是有一段路相当的陡!还是老爸最厉害,他走在最前面,哈哈!
上坡容易下坡难,在回来时,走完那段高坡,我的脚在发软,发抖,呵呵
这次回家很多人都说我胖了,说最近吃得不错,连三哥都偷偷在问老爸,
那应该都是猪头的功劳,每次都让我多吃点,呵呵
昨天,跟萍搭12:30那班车回来厦门,居然全程走高速,3点就到车站了
猪头去车站接我们了,哈哈!
我们到上岛coffee休息了会,送萍到火车站去坐直达车回学校后,我跟猪头去他宿舍了
昨晚在猪头那吃完饭才回宿舍的
最近工作较忙,03.21第二次福州办身份证回来今天才在这发牢骚
这次是莲陪我一起去的,一路上,三个多小时,我们一直聊着,谈着最近所有开心和不开心的事;
我们还计划了暑期去九寨沟旅游呢
到了福州北站时还没11点,老天好像故意给我们安排了个特别的招待,下车时雨下得相当的大!
雨中的浪漫!更让我们回忆起以前在大学时,一起走过的日子!
下车打的,拿户口本,去派处所照相(别想歪了哦)
一切都很恰好,都很紧奏
办完了,终于全部都搞定了,松了口气了,深怕上次的恶作剧再次上演,呵呵
中午莲约了她的堂弟一起在学生街吃饭,
莲真是那个好呀,还给她堂弟买了鞋子,才30元,看起来挺不错的呀!
我当时叫着说我也要买一双回去,最后还真的买了双布鞋,28元,我一直在笑,莲被我的笑搞糊涂了
真的太便宜了!(今天第一次穿上它,脚感还不错,呵呵)
这天(周五)下午我们就在学生街逛了一下午,强呀!(现在想想,当时两个人太强了)
(在逛期间,我们给小蝌蚪发了信息,告之我们俩在学生街)
晚上我们还是去麻烦阿红,阿红还是亲自下橱,阿红的橱艺越来越好了,那晚吃了可多了,
吃饱一称,哇,96,天呀!不可思议!一会就超标啦!
那晚我们聊到挺晚的,虽然前晚跟莲俩个几乎没睡
第二天我们回母校了,我们散步在我们曾经一起走过的每个角落:小树林,含笑花,食堂,操场,天桥。。。
两个人坐在操场旁,小栖了会
很不巧的是,这次回去一个老师都没有见到面。。。。
中午吃完饭我们还去了福清中山路,以前周末经常去逛街的地方,呵呵
莲给她妈妈买了件衣服,当时看到一件很漂亮的中袖衣服,买了
赶紧回福州见小蝌蚪。。。。。
当时见面的场景(毕业后第一次见面哦)。。。。我们笑声不继。。。。抱在一起。。。。可见部分相片:)
那晚我们莲,小蝌蚪三个人一起睡。。。。。。。。。
莲急着要回厦门见她未来的姐夫,第二天闹钟调6点起床,呵呵
我们玩得很开心(回来得赶紧补充睡眠就是了 ,呵呵)
平平淡淡才是真,不知道用这句来总结这阶段是对还是错?
昨晚梦见老妈了,老妈还说我扎两个辫子好看
相信在老妈那个年代扎着两个辫子应该算很好看哦,呵呵!
老妈你在天堂一切都好吧!女儿好想你!
这周晚上开始上课了(周一晚上是班主任的课,班主任人挺逗的,上课没有让我想睡觉,呵呵),
为了晚上上完课,回宿舍比较方便,最近忙着在博物馆一带找房子
昨晚跟MM一起去看了一间中介,房子挺不错的,但挺里面就是,走到博物馆大概要6分钟,
1000元/月,后来跟中介说了我们的需求
中介给房东打电话,没接通。。。
我们先去了阿胖家吃沙锅,等我们点完,电话来了,告之,那间已有人交了压金,当时那个郁闷呀。。。
相当失望,在去吃饭的路上还想好周四或五请人打扫,周六搬进去,可一切落空了。。。。。
上周五去学校注册了,今晚要开始上课了,想着迷茫。。。。。
三年的时间真不知道要怎么熬过去;
真的是只为了那张毫无意义的文凭!
不过,从小是个好学生,不敲课,不逃课,按时做作业,
可现在觉得在教室听着老师讲课有点听不进去了,真不想去上课。。。
还没开始上课就想着不去上课了,相当糟糕!
当到学校注册完后,心想是不是什么时候会放弃不去读。。。
真的有点迷茫,不知道这样的选择是否会坚持到底
春节回来第一天上班,相当睏!
赶紧准备下班,晚上DD请吃饭
今天天气真好,太感谢太阳公公了,嘻嘻:)
我已经等你很久了,今天一来公司就把MSN签名更改成:终于看到你了
最近连着下雨,衣服都没干,到处湿湿的,特难受,这几天还特别地冷!
明天可以回家了,不过,今年没有买到汽车票,明天得在漳州转车了
现在想着回家就激动!
在此,先祝大家春节快乐,身体健康,万事如意!
感情的事不求速度,只求质量!
别把自己的感情投入得太积极!
多给彼此了解的时间和空间