看到这则新闻的时候,注意的事发的地区是兰州,很关注,因为在家乡么。本来以为可能是某个非著名奶粉造成的,结果等到真相大白的生活居然是三鹿的,很是震惊。其实想一想,现在就一个孩子,父母一般都是很上心的,那些能买得起好奶粉的父母是无所谓了,但是那些买不起好奶粉的父母,怎么也要买个牌子货,一来对孩子好,二来放心么。谁知道……
想来穷人家的孩子能长大成人还真是不容易。
转:
提示语: “结石婴儿”的病是吃出来的,他们还拥有一个共同的身份——穷人家的孩子,正是这种无奈的生存状态让他们选择了廉价地活着的路
近日,陕西、甘肃、宁夏、江苏均发现婴儿患肾结石病例,据报道,这些患病的婴儿皆食用了三鹿奶粉。现在,三鹿奶粉已经做出回应,承认部分产品受到了污染,已经宣布产品召回。
按照常理,三鹿奶粉被铁定认为是致病的根源。但是,三鹿奶粉并非只被这些婴儿食用,为什么更多的婴儿没有出现肾结石?婴儿肾结石发病的机理,也是一个急迫需要医疗机构解开的谜团。或许有的人会说,此事如同注射青霉素并非所有的人会有药物反应,但是,食品不是药品,只要是符合卫生标准的奶粉就不应喝出什么问题来。难道还需要在奶粉包装上注明“此奶粉有副作用,食用请注意”?婴儿肾结石事件的性质在于,在本不应出现问题的地方出了问题。也正是因为这一点,三鹿奶粉厂家的回应,就不应只是发表生命,而应负责任地配合调查,做好相应的善后处理。
然而,疾病往往并不是单纯的医学与技术问题,同时也是社会问题。这些年富裕起来的国人已经开始得起了富贵病;不过,我们仍然不能否认有些疾病仍然是穷人的专利。“结石婴儿事件”很容易让人联想到当年的“大头娃娃事件”。这两个高度相似的事情,只能说明穷人的孩子早受罪。
只要对事件进行分析,我们可以看到,发生不幸的婴儿皆是穷人的孩子。当年的阜阳假奶粉售价不高,因而成为广大农村婴儿的首选。两年来,吃一堑长一智,大家也都开始选择品牌了,然而,他们的消费水平却并没有就此提上去。三鹿是老品牌,而且据新华网的报道在甘肃只卖18元/400克,看上去“物美价廉”。这的确是除了阜阳假奶粉之外,在中國最廉价的奶粉了。与婴儿奶粉市场上的雀巢、多美滋、美赞臣等一线品牌相比,三鹿奶粉的售价实在便宜。这些一线品牌一般900克装的1罐都在200元左右,有的更贵,其价格基本上是结石婴儿所喝奶粉的5倍左右。如果,你的婴儿胃口很好一周喝一罐,那么一个月的奶粉钱就是1000元左右。这个消费水准恐怕是很多穷人家庭消费不起的。
现在,计划生育之下孩子都是稀缺品,一般的父母都会为了孩子尽自己的最大所能。我相信,这些“结石婴儿”的父母也是如此。给孩子喝廉价的奶粉,并不是他们不爱自己的孩子,乃是因为他们是穷人,给孩子喝不起最好的、最安全的奶粉。
中國人都有“买贵买放心”的心理。如果,价格的高低成为食品质量的判断依据,那么这无疑是最残酷的一种标准。而在结石婴儿事件中,又让我们很不幸地看到,这的确就是正在我们身边发生的现实。至少在公众视野中,在传媒高度发达的今天,我们还没有听说那些一线品牌的奶粉让孩子喝出病来。
在这个事情上,我们固然可以谴责有关厂家以及政府部门的不负责任,然而,这又能改变什么?中國这么大,总是有那么多的商家、会有那么多的基层政府部门对自己“低标准、宽要求”,当然最重要的是总会有一个庞大的穷人消费群体,他们是消化一切廉价、不良商品的终端,最终廉价地生病乃至死去。他们没有更多的钱去买来健康与安全,因此,他们的住所、言行乃至是疾病,全都打上了穷人的烙印。当一级地方政府就食品安全问题连基本责任和基本保障都无法提供的时候,收入差别就构成了起点的不平等。就像那些“大头娃娃”和这些“结石婴儿”,他们从生下来就开始比别人多遭一番罪。如果说输在起点,没有比这更真实更触目惊心的教材了。
Friday, September 12, 2008
Thursday, August 28, 2008
总结下目前的状态
能来blogger了,好久没来更新这里,想想国内基本上不去,也就没什么人看了。现在写,就当是写给自己,活著总要图个存在么,估计Google有个几十年是倒不了,我写的东西应该能存在的久一点。最近Blogger可以上了,这个要感谢我们伟大的党,是他给了我们这一切,我很感激。
最近受了点小小的打击,尝试跳槽,总是高不成低不就的,很尴尬。想想目前的状态,真的需要反思一下自己。自己能混到今天的状态,真的是四个字,自作自受。所有我对自己也没什么好说的。猪老是说要对现在的生活知足,其实我倒是没什么不满足的,就是觉得本不该这样的。
回顾下自己的成长经历,说起来好像是一帆风顺的,基本没有遇到什么大的挫折。在高中的生活很迷茫,但是最后却也混了一个大学上,不知道是好还是不好。也许在那时候失败,对我来说更好一点把,早一点看到自己身上存在的问题。反正就是这样,混混浩浩的又过了四年。现在唯一对得起自己的是,还算没有啃老,现在在社会上也算是自食其力了。按照目前的生活状态,我仿佛看到了自己这一辈子会要怎么过。安心上班,在不同的单位混个小头,拿工资,存钱,供房子,娶老婆生孩子……我这个时候才发现这一切不是我真正想要的生活。但是一直以来自己对生活的态度,决定了这一切,好像我只能这样了。一直没有努力的追求自己真正想要的东西,现在才发现,这样的生活真的很可悲。可又有什么办法呢,今天的一切一起,都是自己造成的。
毕竟早已经过了那个迷茫的青春期了,现在的我需要静下来想一想,自己想要的生活。当然不是幻想,我发现看一个人有多想要一样东西的时候,最简单的办法就是看看他愿意为这件东西付出什么。所以我真正需要考虑的是,为了改变今天的生活,我到底愿意为之付出什么。如果是什么都没有的话,那么再过10年,我就告诉自己,自己活该这样,没什么好说的。这么多年来其实最最对不起的人,就是我自己了。我知道很多事情已经晚了,但是真的希望他们都不是太晚。告诫自己:没有人能随随便便成功!
该干嘛,干嘛去!!!!!!!!!!!
最近受了点小小的打击,尝试跳槽,总是高不成低不就的,很尴尬。想想目前的状态,真的需要反思一下自己。自己能混到今天的状态,真的是四个字,自作自受。所有我对自己也没什么好说的。猪老是说要对现在的生活知足,其实我倒是没什么不满足的,就是觉得本不该这样的。
回顾下自己的成长经历,说起来好像是一帆风顺的,基本没有遇到什么大的挫折。在高中的生活很迷茫,但是最后却也混了一个大学上,不知道是好还是不好。也许在那时候失败,对我来说更好一点把,早一点看到自己身上存在的问题。反正就是这样,混混浩浩的又过了四年。现在唯一对得起自己的是,还算没有啃老,现在在社会上也算是自食其力了。按照目前的生活状态,我仿佛看到了自己这一辈子会要怎么过。安心上班,在不同的单位混个小头,拿工资,存钱,供房子,娶老婆生孩子……我这个时候才发现这一切不是我真正想要的生活。但是一直以来自己对生活的态度,决定了这一切,好像我只能这样了。一直没有努力的追求自己真正想要的东西,现在才发现,这样的生活真的很可悲。可又有什么办法呢,今天的一切一起,都是自己造成的。
毕竟早已经过了那个迷茫的青春期了,现在的我需要静下来想一想,自己想要的生活。当然不是幻想,我发现看一个人有多想要一样东西的时候,最简单的办法就是看看他愿意为这件东西付出什么。所以我真正需要考虑的是,为了改变今天的生活,我到底愿意为之付出什么。如果是什么都没有的话,那么再过10年,我就告诉自己,自己活该这样,没什么好说的。这么多年来其实最最对不起的人,就是我自己了。我知道很多事情已经晚了,但是真的希望他们都不是太晚。告诫自己:没有人能随随便便成功!
该干嘛,干嘛去!!!!!!!!!!!
Thursday, May 24, 2007
《加菲猫》经典语录50条
1、嘘——千万不要告诉他们我做了好事,这会影响我的形象的!
2、你竟然带了一个又老又没用的家伙回来,而且不是我。
3、爱情来得快去得也快,只有猪肉卷是永恒的。
4、加菲猫肯定不是为猪肉卷而生,但猪肉卷一定是为加菲猫而生。
5、欧迪,我们去吃冰激凌吧,不过你得看着我吃。
6、我应该对欧迪有礼貌。——(吲迪一脚)——很抱歉,欧迪?现在我做到了。
7、我不能让那只鸡在我的名字后面写字。
8、这个汉堡包的味道不错,但不如前八个好。
9、欧迪,走,我们去买一个或九个汉堡包当晚餐。
10、肚子大不可怕,可怕的是肚子里没有好东西。
11、有了意大利面,谁还会吃老鼠呢?
12、“欧迪在窗外冻得瑟瑟发抖,真可怜。我真有点不忍心看他这样。不,难道我能坐视不管吗?我必须做点什么。”加菲拉上了窗帘。
13、你可以让小猫离开肉饼,但不能让肉饼离开小猫。
14、如果你不想给谁东西吃的话,就得让它想着点什么。
15、巧克力的麻烦是:你把它吃了,它就没了。
16、最可爱的东西莫过于一张放着猪肉卷的小桌子。
17、(深沉状……)——我是在做梦吗?——(冲到自己“床”前,掀起被子……)被子里没有我,不是在睡觉……
18、这个世界上还有很多比钱更重要的东西,比如说意大利面。
19、能从这种不让体重增加的运动中得到乐趣真是太好了。
20、失败的人特点是会不断地失败。如果你想看看他的失败的话,他是不会让你失望的。
21、加菲猫要有了三个愿望:“第一个是要猪肉卷,第二个还是猪肉卷,第三个,哦,你错啦,我想要更多的愿望,那样我就能得到更多的猪肉卷啦。”
22、今后我永远不做对不起欧迪的事,……也许,也许不是永远。
23、现在,你能把星期一还给我们吗?还有星期三和整个八月,威斯康星州和巧克力糖。……对了,还有一点,你能把我的硬币也还给我吗?
24、有一位漂亮的女士对乔恩说你真可爱,而你还问我有什么不对!
25、如果你不能击败你的敌人,那么就加入他们。
26、纳尔曼,你好。我现在在阿布扎比。这里最糟糕的地方不在于没有意大利面条,也不在于离家几千英里。最可怕的地方在于--这里挤满了被邮寄来的,可爱的猫!
27、“加菲猫,你不会是真的要把我用快件寄到阿布扎比去吧?”“不,纳尔曼,我不会的。我会用慢件,这样可以便宜一点。”
28、球状也是身材。
29、不,水果蛋糕!这是我不吃的三样东西之一。另外两样是葡萄干,还有蜗牛。
30、——乔恩,你要是猜出这里面有多少巧克力豆,这罐子里的东西就都归你。
——我猜你已经把它们都吃光了。
——你猜对了!
31、纳尔曼:加菲猫,你是来为我辩护的吗?
加菲猫:不是,我来是为了确认你有罪的。
... ...
你说猫委员会会判纳尔曼多少年刑,我看最好判99年。
... ...
32、返希你能帮我个忙吗?帮我申请做一只狗,最好是西班牙狮子狗!
33、狗的问题就在于,它们身上没有装一个ON/OFF开关。
34、我还得对欧迪说一声对不起——(这时欧迪站在桌子边上,走过去一脚踢将下去。)——现在得说两声。
35、今天是星期一,一切都不对劲,我该做点什么呢?哦,我知道了。——(吲迪一脚,返闲浮在空中)——哎!今天连地球引力都没精神了。
36、就到这儿吧!我要去睡今天的第三个午觉了。
37、我向星星许了个愿。我并不是真的相信它,但是反正也是免费的,而且也没有证据证明它不灵。
38、我在蹦极,你看不出来吗?
39、睡了美美的一觉,16个小时,我是喜欢睡短觉的。
40、加菲猫看见小狗欧迪跑进了一个古城堡,就跟了进去。打开一扇门,一个大厅黑咕隆冬的。加菲猫喊:“欧迪!”
回音(渐弱):“欧迪——欧迪——欧迪——”
加菲猫又喊:“你在哪里?”
回音(还是渐弱的):“你在哪里?——你在哪里?——你在哪里?——”
加菲猫想:这声音不错。
加菲猫继续喊:“加菲猫是世界上最美丽最英俊的猫!”
回音(渐强的):“不可能——胡说——瞎说——骗人的——”
41、乔恩:“加菲猫,你猜我给你带什么来了?”
加菲:不管是什么,只要能吃就行。
42、乔恩在洗澡,Garfield在睡觉。
加菲:那些一边洗澡一边唱歌的人应该拉到街上去枪毙。
43、加菲在饭桌旁等着开饭,乔恩却忙着要出门。
加菲:嗨,你没有忘记什么重要的事情吗?
……
加菲:要知道,在有些州不给猫做早饭是重罪。
44、加菲:(讲述一个故事)很久很久以前,有一个小姑娘……(画面出现odie身穿公主裙的背影)……她……(odie突然转过身来,伸着长长的舌头)……她丑的就像冰箱里什么都没有一样!!
45、加菲手里拿着一个冰激凌,对odie说:odie,要不要舔一下?odie满心欢喜的诚恳又期待的望着加菲。加菲伸出舌头在odie脸上很用力的舔了一下,继续吃冰激凌……
46、虽然欧迪是条狗,但它有时候也过着狗一样的生活。--------猫哲学家
47、(凄凉的小提琴音乐之后)嗨!
高高地抬起你的头,迈开大步朝前走!
你要向人们证明你不是一个任人欺负的土豆,。
48、你手里握着一只鸟,那是远远不够的。
49、加菲猫节食秘诀:1.不要打算吃不够再来第二轮,第一次就要拿够食物。2.把磅秤的零点调成负5公斤。3.绝对不吃减肥糖。4.不要结交家里开餐厅或糕饼店的女朋友。5.减肥应多吃蔬菜,所以该多吃南瓜派,蔬菜饼干等。6.冷食不宜多吃(但冰激凌除外)。7.每餐留一点儿,不要统统吃下肚——比方说,冰激凌圣代上的那颗樱桃)。8.多跟比你胖的人在一起。
50、猫冲向食物的速度和食物的多少成正比。
51、今天是元旦..我决定在新的一年里每天睡眠时间不超过8小时.这样的话..8x365/24..121.6天..5月3日叫我起床!
52、今天我要做俯卧撑.....呃呀呀呀呀呀.........今天先俯卧...........明天再撑.............
53、我胖我懒————可是我自豪!
54、我的体重刚刚好——相当于一艘航空母舰,乔恩:这是我和加菲去公园的照片,这是加菲和一只三百美元的小鸟坐在一起,这是我在为加菲的午餐付帐——共三百美元…
2、你竟然带了一个又老又没用的家伙回来,而且不是我。
3、爱情来得快去得也快,只有猪肉卷是永恒的。
4、加菲猫肯定不是为猪肉卷而生,但猪肉卷一定是为加菲猫而生。
5、欧迪,我们去吃冰激凌吧,不过你得看着我吃。
6、我应该对欧迪有礼貌。——(吲迪一脚)——很抱歉,欧迪?现在我做到了。
7、我不能让那只鸡在我的名字后面写字。
8、这个汉堡包的味道不错,但不如前八个好。
9、欧迪,走,我们去买一个或九个汉堡包当晚餐。
10、肚子大不可怕,可怕的是肚子里没有好东西。
11、有了意大利面,谁还会吃老鼠呢?
12、“欧迪在窗外冻得瑟瑟发抖,真可怜。我真有点不忍心看他这样。不,难道我能坐视不管吗?我必须做点什么。”加菲拉上了窗帘。
13、你可以让小猫离开肉饼,但不能让肉饼离开小猫。
14、如果你不想给谁东西吃的话,就得让它想着点什么。
15、巧克力的麻烦是:你把它吃了,它就没了。
16、最可爱的东西莫过于一张放着猪肉卷的小桌子。
17、(深沉状……)——我是在做梦吗?——(冲到自己“床”前,掀起被子……)被子里没有我,不是在睡觉……
18、这个世界上还有很多比钱更重要的东西,比如说意大利面。
19、能从这种不让体重增加的运动中得到乐趣真是太好了。
20、失败的人特点是会不断地失败。如果你想看看他的失败的话,他是不会让你失望的。
21、加菲猫要有了三个愿望:“第一个是要猪肉卷,第二个还是猪肉卷,第三个,哦,你错啦,我想要更多的愿望,那样我就能得到更多的猪肉卷啦。”
22、今后我永远不做对不起欧迪的事,……也许,也许不是永远。
23、现在,你能把星期一还给我们吗?还有星期三和整个八月,威斯康星州和巧克力糖。……对了,还有一点,你能把我的硬币也还给我吗?
24、有一位漂亮的女士对乔恩说你真可爱,而你还问我有什么不对!
25、如果你不能击败你的敌人,那么就加入他们。
26、纳尔曼,你好。我现在在阿布扎比。这里最糟糕的地方不在于没有意大利面条,也不在于离家几千英里。最可怕的地方在于--这里挤满了被邮寄来的,可爱的猫!
27、“加菲猫,你不会是真的要把我用快件寄到阿布扎比去吧?”“不,纳尔曼,我不会的。我会用慢件,这样可以便宜一点。”
28、球状也是身材。
29、不,水果蛋糕!这是我不吃的三样东西之一。另外两样是葡萄干,还有蜗牛。
30、——乔恩,你要是猜出这里面有多少巧克力豆,这罐子里的东西就都归你。
——我猜你已经把它们都吃光了。
——你猜对了!
31、纳尔曼:加菲猫,你是来为我辩护的吗?
加菲猫:不是,我来是为了确认你有罪的。
... ...
你说猫委员会会判纳尔曼多少年刑,我看最好判99年。
... ...
32、返希你能帮我个忙吗?帮我申请做一只狗,最好是西班牙狮子狗!
33、狗的问题就在于,它们身上没有装一个ON/OFF开关。
34、我还得对欧迪说一声对不起——(这时欧迪站在桌子边上,走过去一脚踢将下去。)——现在得说两声。
35、今天是星期一,一切都不对劲,我该做点什么呢?哦,我知道了。——(吲迪一脚,返闲浮在空中)——哎!今天连地球引力都没精神了。
36、就到这儿吧!我要去睡今天的第三个午觉了。
37、我向星星许了个愿。我并不是真的相信它,但是反正也是免费的,而且也没有证据证明它不灵。
38、我在蹦极,你看不出来吗?
39、睡了美美的一觉,16个小时,我是喜欢睡短觉的。
40、加菲猫看见小狗欧迪跑进了一个古城堡,就跟了进去。打开一扇门,一个大厅黑咕隆冬的。加菲猫喊:“欧迪!”
回音(渐弱):“欧迪——欧迪——欧迪——”
加菲猫又喊:“你在哪里?”
回音(还是渐弱的):“你在哪里?——你在哪里?——你在哪里?——”
加菲猫想:这声音不错。
加菲猫继续喊:“加菲猫是世界上最美丽最英俊的猫!”
回音(渐强的):“不可能——胡说——瞎说——骗人的——”
41、乔恩:“加菲猫,你猜我给你带什么来了?”
加菲:不管是什么,只要能吃就行。
42、乔恩在洗澡,Garfield在睡觉。
加菲:那些一边洗澡一边唱歌的人应该拉到街上去枪毙。
43、加菲在饭桌旁等着开饭,乔恩却忙着要出门。
加菲:嗨,你没有忘记什么重要的事情吗?
……
加菲:要知道,在有些州不给猫做早饭是重罪。
44、加菲:(讲述一个故事)很久很久以前,有一个小姑娘……(画面出现odie身穿公主裙的背影)……她……(odie突然转过身来,伸着长长的舌头)……她丑的就像冰箱里什么都没有一样!!
45、加菲手里拿着一个冰激凌,对odie说:odie,要不要舔一下?odie满心欢喜的诚恳又期待的望着加菲。加菲伸出舌头在odie脸上很用力的舔了一下,继续吃冰激凌……
46、虽然欧迪是条狗,但它有时候也过着狗一样的生活。--------猫哲学家
47、(凄凉的小提琴音乐之后)嗨!
高高地抬起你的头,迈开大步朝前走!
你要向人们证明你不是一个任人欺负的土豆,。
48、你手里握着一只鸟,那是远远不够的。
49、加菲猫节食秘诀:1.不要打算吃不够再来第二轮,第一次就要拿够食物。2.把磅秤的零点调成负5公斤。3.绝对不吃减肥糖。4.不要结交家里开餐厅或糕饼店的女朋友。5.减肥应多吃蔬菜,所以该多吃南瓜派,蔬菜饼干等。6.冷食不宜多吃(但冰激凌除外)。7.每餐留一点儿,不要统统吃下肚——比方说,冰激凌圣代上的那颗樱桃)。8.多跟比你胖的人在一起。
50、猫冲向食物的速度和食物的多少成正比。
51、今天是元旦..我决定在新的一年里每天睡眠时间不超过8小时.这样的话..8x365/24..121.6天..5月3日叫我起床!
52、今天我要做俯卧撑.....呃呀呀呀呀呀.........今天先俯卧...........明天再撑.............
53、我胖我懒————可是我自豪!
54、我的体重刚刚好——相当于一艘航空母舰,乔恩:这是我和加菲去公园的照片,这是加菲和一只三百美元的小鸟坐在一起,这是我在为加菲的午餐付帐——共三百美元…
Friday, May 18, 2007
正则表达式之道
正则表达式之道
原著:Steve Mansour
sman@scruznet.com
Revised: June 5, 1999
(copied by jm /at/ jmason.org from http://www.scruz.net/%7esman/regexp.htm, after the original disappeared! )
翻译:Neo Lee
neo.lee@gmail.com
2004年10月16日
英文版原文
译者按:原文因为年代久远,文中很多链接早已过期(主要是关于vi、sed等工具的介绍和手册),本译文中已将此类链接删除,如需检查这些链接可以查看上面链接的原文。除此之外基本照原文直译,括号中有“译者按”的部分是译者补充的说明。如有内容方面的问题请直接和Steve Mansor联系,当然,如果你只写中文,也可以和我联系。
目 录
什么是正则表达式
范例
简单
中级(神奇的咒语)
困难(不可思议的象形文字)
不同工具中的正则表达式
什么是正则表达式
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。
我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考。
正则表达式基础
正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
元字符 描述
. 匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。
$ 匹配行结束符。例如正则表达式weasel$ 能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。
^ 匹配一行的开始。例如正则表达式^When in能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。
* 匹配0或多个正好在它之前的那个字符。例如正则表达式.*意味着能够匹配任意数量的任何字符。
\ 这是引用府,用来将这里列出的这些元字符当作普通的字符来进行匹配。例如正则表达式\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\.用来匹配点字符,而不是任何字符的通配符。
[ ]
[c1-c2]
[^c1-c2] 匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。
\< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\ \( \) 将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
| 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+ 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
\{i\}
\{i,j\} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]\{3\} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]\{4,6\} 匹配连续的任意4个、5个或者6个数字字符。注意:这个元字符不是所有的软件都支持的。
最简单的元字符是点,它能够匹配任何单个字符(注意不包括新行符)。假定有个文件test.txt包含以下几行内容:
he is a rat
he is in a rut
the food is Rotten
I like root beer
我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。命令
grep r.t test.txt
在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。正则表达式r.t匹配一个r接着任何一个字符再接着一个t。所以它将匹配文件中的rat和rut,而不能匹配Rotten中的Rot,因为正则表达式是大小写敏感的。要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。正则表达式[Rr]能够同时匹配R和r。所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。
要想匹配行首的字符要使用抑扬字符(^)——又是也被叫做插入符。例如,想找到text.txt中行首"he"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的h。
有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出现在方括号中是,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。
可以使用方括号来指定多个字符区间。例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]* 匹配一个字母后面接着0或者多个字母(大写或者小写)。当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等价。但是要注意元字符+ 并不是所有支持正则表达式的程序都支持的。关于这一点可以参考后面的正则表达式语法支持情况。
要指定特定数量的匹配,要使用大括号(注意必须使用反斜杠来转义)。想匹配所有100和1000的实例而排除10和10000,可以使用:10\{2,3\},这个正则表达式匹配数字1后面跟着2或者3个0的模式。在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\{3,\} 将匹配至少3个连续的0。
简单的例子
这里有一些有代表性的、比较简单的例子。
vi 命令 作用
:%s/ */ /g 把一个或者多个空格替换为一个空格。
:%s/ *$// 去掉行尾的所有空格。
:%s/^/ / 在每一行头上加入一个空格。
:%s/^[0-9][0-9]* // 去掉行首的所有数字字符。
:%s/b[aeio]g/bug/g 将所有的bag、beg、big和bog改为bug。
:%s/t\([aou]\)g/h\1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用\1引用前面被匹配的字符)。
中级的例子(神奇的咒语)
例1
将所有方法foo(a,b,c)的实例改为foo(b,a,c)。这里a、b和c可以是任何提供给方法foo()的参数。也就是说我们要实现这样的转换:
之前 之后
foo(10,7,2) foo(7,10,2)
foo(x+13,y-2,10) foo(y-2,x+13,10)
foo( bar(8), x+y+z, 5) foo( x+y+z, bar(8), 5)
下面这条替换命令能够实现这一魔法:
:%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo(\2,\1,\3)/g
现在让我们把它打散来加以分析。写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。第一个参数是用这个表达式来识别的::\([^,]*\),我们可以从里向外来分析它:
[^,] 除了逗号之外的任何字符
[^,]* 0或者多个非逗号字符
\([^,]*\) 将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它
\([^,]*\), 我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。
现在正是指出一个使用正则表达式常见错误的最佳时机。为什么我们要使用[^,]*这样的一个表达式,而不是更加简单直接的写法,例如:.*,来匹配第一个参数呢?设想我们使用模式.*来匹配字符串"10,7,2",它应该匹配"10,"还是"10,7,"?为了解决这个两义性(ambiguity),正则表达式规定一律按照最长的串来,在上面的例子中就是"10,7,",显然这样就找出了两个参数而不是我们期望的一个。所以,我们要使用[^,]*来强制取出第一个逗号之前的部分。
这个表达式我们已经分析到了:foo(\([^,]*\),这一段可以简单的翻译为“当你找到foo(就把其后直到第一个逗号之前的部分标记为\1”。然后我们使用同样的办法标记第二个参数为\2。对第三个参数的标记方法也是一样,只是我们要搜索所有的字符直到右括号。我们并没有必要去搜索第三个参数,因为我们不需要调整它的位置,但是这样的模式能够保证我们只去替换那些有三个参数的foo()方法调用,在foo()是一个重载(overoading)方法时这种明确的模式往往是比较保险的。然后,在替换部分,我们找到foo()的对应实例,然后利用标记好的部分进行替换,是的第一和第二个参数交换位置。
例2
假设有一个CSV(comma separated value)文件,里面有一些我们需要的信息,但是格式却有问题,目前数据的列顺序是:姓名,公司名,州名缩写,邮政编码,现在我们希望讲这些数据重新组织,以便在我们的某个软件中使用,需要的格式为:姓名,州名缩写-邮政编码,公司名。也就是说,我们要调整列顺序,还要合并两个列来构成一个新列。另外,我们的软件不能接受逗号前后面有任何空格(包括空格和制表符)所以我们还必须要去掉逗号前后的所有空格。
这里有几行我们现在的数据:
Bill Jones, HI-TEK Corporation , CA, 95011
Sharon Lee Smith, Design Works Incorporated, CA, 95012
B. Amos , Hill Street Cafe, CA, 95013
Alexander Weatherworth, The Crafts Store, CA, 95014
...
我们希望把它变成这个样子:
Bill Jones,CA 95011,HI-TEK Corporation
Sharon Lee Smith,CA 95012,Design Works Incorporated
B. Amos,CA 95013,Hill Street Cafe
Alexander Weatherworth,CA 95014,The Crafts Store
...
我们将用两个正则表达式来解决这个问题。第一个移动列和合并列,第二个用来去掉空格。
下面就是第一个替换命令:
:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3 \4,\2/
这里的方法跟例1基本一样,第一个列(姓名)用这个表达式来匹配:\([^,]*\),即第一个逗号之前的所有字符,而姓名内容被用\1标记下来。公司名和州名缩写字段用同样的方法标记为\2和\3,而最后一个字段用\(.*\)来匹配("匹配所有字符直到行末")。替换部分则引用上面标记的那些内容来进行构造。
下面这个替换命令则用来去除空格:
:%s/[ \t]*,[ \t]*/,/g
我们还是分解来看:[ \t]匹配空格/制表符,[ \t]* 匹配0或多个空格/制表符,[ \t]*,匹配0或多个空格/制表符后面再加一个逗号,最后,[ \t]*,[ \t]*匹配0或多个空格/制表符接着一个逗号再接着0或多个空格/制表符。在替换部分,我们简单的我们找到的所有东西替换成一个逗号。这里我们使用了结尾的可选的g参数,这表示在每行中对所有匹配的串执行替换(而不是缺省的只替换第一个匹配串)。
例3
假设有一个多字符的片断重复出现,例如:
Billy tried really hard
Sally tried really really hard
Timmy tried really really really hard
Johnny tried really really really really hard
而你想把"really"、"really really",以及任意数量连续出现的"really"字符串换成一个简单的"very"(simple is good!),那么以下命令:
:%s/\(really \)\(really \)*/very /
就会把上述的文本变成:
Billy tried very hard
Sally tried very hard
Timmy tried very hard
Johnny tried very hard
表达式\(really \)*匹配0或多个连续的"really "(注意结尾有个空格),而\(really \)\(really \)* 匹配1个或多个连续的"really "实例。
困难的例子(不可思议的象形文字)
Coming soon.
不同工具中的正则表达式
OK,你已经准备使用RE(regular expressions,正则表达式),但是你并准备使用vi。所以,在这里我们给出一些在其他工具中使用RE的例子。另外,我还会总结一下你在不同程序之间使用RE可能发现的区别。
当然,你也可以在Visual C++编辑器中使用RE。选择Edit->Replace,然后选择"Regular expression"选择框,Find What输入框对应上面介绍的vi命令:%s/pat1/pat2/g中的pat1部分,而Replace输入框对应pat2部分。但是,为了得到vi的执行范围和g选项,你要使用Replace All或者适当的手工Find Next and Replace(译者按:知道为啥有人骂微软弱智了吧,虽然VC中可以选中一个范围的文本,然后在其中执行替换,但是总之不够vi那么灵活和典雅)。
sed
Sed是Stream EDitor的缩写,是Unix下常用的基于文件和管道的编辑工具,可以在手册中得到关于sed的详细信息。
这里是一些有趣的sed脚本,假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件,sed只是处理源文件的每一行并把结果显示在标准输出中(当然很容易使用重定向来定制):
sed脚本 描述
sed 's/^$/d' price.txt 删除所有空行
sed 's/^[ \t]*$/d' price.txt 删除所有只包含空格或者制表符的行
sed 's/"//g' price.txt 删除所有引号
awk
awk是一种编程语言,可以用来对文本数据进行复杂的分析和处理。可以在手册中得到关于awk的详细信息。这个古怪的名字是它作者们的姓的缩写(Aho,Weinberger和Kernighan)。
在Aho,Weinberger和Kernighan的书The AWK Programming Language中有很多很好的awk的例子,请不要让下面这些微不足道的脚本例子限制你对awk强大能力的理解。我们同样假定我们针对price.txt文件进行处理,跟sed一样,awk也只是把结果显示在终端上。
awk脚本 描述
awk '$0 !~ /^$/' price.txt 删除所有空行
awk 'NF > 0' price.txt awk中一个更好的删除所有行的办法
awk '$2 ~ /^[JT]/ {print $3}' price.txt 打印所有第二个字段是'J'或者'T'打头的行中的第三个字段
awk '$2 !~ /[Mm]isc/ {print $3 + $4}' price.txt 针对所有第二个字段不包含'Misc'或者'misc'的行,打印第3和第4列的和(假定为数字)
awk '$3 !~ /^[0-9]+\.[0-9]*$/ {print $0}' price.txt 打印所有第三个字段不是数字的行,这里数字是指d.d或者d这样的形式,其中d是0到9的任何数字
awk '$2 ~ /John|Fred/ {print $0}' price.txt 如果第二个字段包含'John'或者'Fred'则打印整行
grep
grep是一个用来在一个或者多个文件或者输入流中使用RE进行查找的程序。它的name编程语言可以用来针对文件和管道进行处理。可以在手册中得到关于grep的完整信息。这个同样古怪的名字来源于vi的一个命令,g/re/p,意思是global regular expression print。
下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
Francis, John 5-3871
Wong, Fred 4-4123
Jones, Thomas 1-4122
Salazar, Richard 5-2522
grep命令 描述
grep '\t5-...1' phone.txt 把所有电话号码以5开头以1结束的行打印出来,注意制表符是用\t表示的
grep '^S[^ ]* R' phone.txt 打印所有姓以S打头和名以R打头的行
grep '^[JW]' phone.txt 打印所有姓开头是J或者W的行
grep ', ....\t' phone.txt 打印所有姓是4个字符的行,注意制表符是用\t表示的
grep -v '^[JW]' phone.txt 打印所有不以J或者W开头的行
grep '^[M-Z]' phone.txt 打印所有姓的开头是M到Z之间任一字符的行
grep '^[M-Z].*[12]' phone.txt 打印所有姓的开头是M到Z之间任一字符,并且点号号码结尾是1或者2的行
egrep
egrep是grep的一个扩展版本,它在它的正则表达式中支持更多的元字符。下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
Francis, John 5-3871
Wong, Fred 4-4123
Jones, Thomas 1-4122
Salazar, Richard 5-2522
egrep command Description
egrep '(John|Fred)' phone.txt 打印所有包含名字John或者Fred的行
egrep 'John|22$|^W' phone.txt 打印所有包含John 或者以22结束或者以W的行
egrep 'net(work)?s' report.txt 从report.txt中找到所有包含networks或者nets的行
正则表达式语法支持情况命令或环境 . [ ] ^ $ \( \) \{ \} ? + | ( )
vi X X X X X
Visual C++ X X X X X
awk X X X X X X X X
sed X X X X X X
Tcl X X X X X X X X X
ex X X X X X X
grep X X X X X X
egrep X X X X X X X X X
fgrep X X X X X
perl X X X X X X X X X
vi替换命令简介
Vi的替换命令:
:ranges/pat1/pat2/g
其中
: 这是Vi的命令执行界面。
range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
s 表示其后是一个替换命令。
pat1 这是要查找的一个正则表达式,这篇文章中有一大堆例子。
pat2 这是希望把匹配串变成的模式的正则表达式,这篇文章中有一大堆例子。
g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。
网上有很多vi的在线手册,你可以访问他们以获得更加完整的信息。
[回到主页]
原著:Steve Mansour
sman@scruznet.com
Revised: June 5, 1999
(copied by jm /at/ jmason.org from http://www.scruz.net/%7esman/regexp.htm, after the original disappeared! )
翻译:Neo Lee
neo.lee@gmail.com
2004年10月16日
英文版原文
译者按:原文因为年代久远,文中很多链接早已过期(主要是关于vi、sed等工具的介绍和手册),本译文中已将此类链接删除,如需检查这些链接可以查看上面链接的原文。除此之外基本照原文直译,括号中有“译者按”的部分是译者补充的说明。如有内容方面的问题请直接和Steve Mansor联系,当然,如果你只写中文,也可以和我联系。
目 录
什么是正则表达式
范例
简单
中级(神奇的咒语)
困难(不可思议的象形文字)
不同工具中的正则表达式
什么是正则表达式
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。
我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考。
正则表达式基础
正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
元字符 描述
. 匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。
$ 匹配行结束符。例如正则表达式weasel$ 能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。
^ 匹配一行的开始。例如正则表达式^When in能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。
* 匹配0或多个正好在它之前的那个字符。例如正则表达式.*意味着能够匹配任意数量的任何字符。
\ 这是引用府,用来将这里列出的这些元字符当作普通的字符来进行匹配。例如正则表达式\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\.用来匹配点字符,而不是任何字符的通配符。
[ ]
[c1-c2]
[^c1-c2] 匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。
\< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\
| 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+ 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
\{i\}
\{i,j\} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]\{3\} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]\{4,6\} 匹配连续的任意4个、5个或者6个数字字符。注意:这个元字符不是所有的软件都支持的。
最简单的元字符是点,它能够匹配任何单个字符(注意不包括新行符)。假定有个文件test.txt包含以下几行内容:
he is a rat
he is in a rut
the food is Rotten
I like root beer
我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。命令
grep r.t test.txt
在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。正则表达式r.t匹配一个r接着任何一个字符再接着一个t。所以它将匹配文件中的rat和rut,而不能匹配Rotten中的Rot,因为正则表达式是大小写敏感的。要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。正则表达式[Rr]能够同时匹配R和r。所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。
要想匹配行首的字符要使用抑扬字符(^)——又是也被叫做插入符。例如,想找到text.txt中行首"he"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的h。
有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出现在方括号中是,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。
可以使用方括号来指定多个字符区间。例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]* 匹配一个字母后面接着0或者多个字母(大写或者小写)。当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等价。但是要注意元字符+ 并不是所有支持正则表达式的程序都支持的。关于这一点可以参考后面的正则表达式语法支持情况。
要指定特定数量的匹配,要使用大括号(注意必须使用反斜杠来转义)。想匹配所有100和1000的实例而排除10和10000,可以使用:10\{2,3\},这个正则表达式匹配数字1后面跟着2或者3个0的模式。在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\{3,\} 将匹配至少3个连续的0。
简单的例子
这里有一些有代表性的、比较简单的例子。
vi 命令 作用
:%s/ */ /g 把一个或者多个空格替换为一个空格。
:%s/ *$// 去掉行尾的所有空格。
:%s/^/ / 在每一行头上加入一个空格。
:%s/^[0-9][0-9]* // 去掉行首的所有数字字符。
:%s/b[aeio]g/bug/g 将所有的bag、beg、big和bog改为bug。
:%s/t\([aou]\)g/h\1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用\1引用前面被匹配的字符)。
中级的例子(神奇的咒语)
例1
将所有方法foo(a,b,c)的实例改为foo(b,a,c)。这里a、b和c可以是任何提供给方法foo()的参数。也就是说我们要实现这样的转换:
之前 之后
foo(10,7,2) foo(7,10,2)
foo(x+13,y-2,10) foo(y-2,x+13,10)
foo( bar(8), x+y+z, 5) foo( x+y+z, bar(8), 5)
下面这条替换命令能够实现这一魔法:
:%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo(\2,\1,\3)/g
现在让我们把它打散来加以分析。写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。第一个参数是用这个表达式来识别的::\([^,]*\),我们可以从里向外来分析它:
[^,] 除了逗号之外的任何字符
[^,]* 0或者多个非逗号字符
\([^,]*\) 将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它
\([^,]*\), 我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。
现在正是指出一个使用正则表达式常见错误的最佳时机。为什么我们要使用[^,]*这样的一个表达式,而不是更加简单直接的写法,例如:.*,来匹配第一个参数呢?设想我们使用模式.*来匹配字符串"10,7,2",它应该匹配"10,"还是"10,7,"?为了解决这个两义性(ambiguity),正则表达式规定一律按照最长的串来,在上面的例子中就是"10,7,",显然这样就找出了两个参数而不是我们期望的一个。所以,我们要使用[^,]*来强制取出第一个逗号之前的部分。
这个表达式我们已经分析到了:foo(\([^,]*\),这一段可以简单的翻译为“当你找到foo(就把其后直到第一个逗号之前的部分标记为\1”。然后我们使用同样的办法标记第二个参数为\2。对第三个参数的标记方法也是一样,只是我们要搜索所有的字符直到右括号。我们并没有必要去搜索第三个参数,因为我们不需要调整它的位置,但是这样的模式能够保证我们只去替换那些有三个参数的foo()方法调用,在foo()是一个重载(overoading)方法时这种明确的模式往往是比较保险的。然后,在替换部分,我们找到foo()的对应实例,然后利用标记好的部分进行替换,是的第一和第二个参数交换位置。
例2
假设有一个CSV(comma separated value)文件,里面有一些我们需要的信息,但是格式却有问题,目前数据的列顺序是:姓名,公司名,州名缩写,邮政编码,现在我们希望讲这些数据重新组织,以便在我们的某个软件中使用,需要的格式为:姓名,州名缩写-邮政编码,公司名。也就是说,我们要调整列顺序,还要合并两个列来构成一个新列。另外,我们的软件不能接受逗号前后面有任何空格(包括空格和制表符)所以我们还必须要去掉逗号前后的所有空格。
这里有几行我们现在的数据:
Bill Jones, HI-TEK Corporation , CA, 95011
Sharon Lee Smith, Design Works Incorporated, CA, 95012
B. Amos , Hill Street Cafe, CA, 95013
Alexander Weatherworth, The Crafts Store, CA, 95014
...
我们希望把它变成这个样子:
Bill Jones,CA 95011,HI-TEK Corporation
Sharon Lee Smith,CA 95012,Design Works Incorporated
B. Amos,CA 95013,Hill Street Cafe
Alexander Weatherworth,CA 95014,The Crafts Store
...
我们将用两个正则表达式来解决这个问题。第一个移动列和合并列,第二个用来去掉空格。
下面就是第一个替换命令:
:%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/\1,\3 \4,\2/
这里的方法跟例1基本一样,第一个列(姓名)用这个表达式来匹配:\([^,]*\),即第一个逗号之前的所有字符,而姓名内容被用\1标记下来。公司名和州名缩写字段用同样的方法标记为\2和\3,而最后一个字段用\(.*\)来匹配("匹配所有字符直到行末")。替换部分则引用上面标记的那些内容来进行构造。
下面这个替换命令则用来去除空格:
:%s/[ \t]*,[ \t]*/,/g
我们还是分解来看:[ \t]匹配空格/制表符,[ \t]* 匹配0或多个空格/制表符,[ \t]*,匹配0或多个空格/制表符后面再加一个逗号,最后,[ \t]*,[ \t]*匹配0或多个空格/制表符接着一个逗号再接着0或多个空格/制表符。在替换部分,我们简单的我们找到的所有东西替换成一个逗号。这里我们使用了结尾的可选的g参数,这表示在每行中对所有匹配的串执行替换(而不是缺省的只替换第一个匹配串)。
例3
假设有一个多字符的片断重复出现,例如:
Billy tried really hard
Sally tried really really hard
Timmy tried really really really hard
Johnny tried really really really really hard
而你想把"really"、"really really",以及任意数量连续出现的"really"字符串换成一个简单的"very"(simple is good!),那么以下命令:
:%s/\(really \)\(really \)*/very /
就会把上述的文本变成:
Billy tried very hard
Sally tried very hard
Timmy tried very hard
Johnny tried very hard
表达式\(really \)*匹配0或多个连续的"really "(注意结尾有个空格),而\(really \)\(really \)* 匹配1个或多个连续的"really "实例。
困难的例子(不可思议的象形文字)
Coming soon.
不同工具中的正则表达式
OK,你已经准备使用RE(regular expressions,正则表达式),但是你并准备使用vi。所以,在这里我们给出一些在其他工具中使用RE的例子。另外,我还会总结一下你在不同程序之间使用RE可能发现的区别。
当然,你也可以在Visual C++编辑器中使用RE。选择Edit->Replace,然后选择"Regular expression"选择框,Find What输入框对应上面介绍的vi命令:%s/pat1/pat2/g中的pat1部分,而Replace输入框对应pat2部分。但是,为了得到vi的执行范围和g选项,你要使用Replace All或者适当的手工Find Next and Replace(译者按:知道为啥有人骂微软弱智了吧,虽然VC中可以选中一个范围的文本,然后在其中执行替换,但是总之不够vi那么灵活和典雅)。
sed
Sed是Stream EDitor的缩写,是Unix下常用的基于文件和管道的编辑工具,可以在手册中得到关于sed的详细信息。
这里是一些有趣的sed脚本,假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件,sed只是处理源文件的每一行并把结果显示在标准输出中(当然很容易使用重定向来定制):
sed脚本 描述
sed 's/^$/d' price.txt 删除所有空行
sed 's/^[ \t]*$/d' price.txt 删除所有只包含空格或者制表符的行
sed 's/"//g' price.txt 删除所有引号
awk
awk是一种编程语言,可以用来对文本数据进行复杂的分析和处理。可以在手册中得到关于awk的详细信息。这个古怪的名字是它作者们的姓的缩写(Aho,Weinberger和Kernighan)。
在Aho,Weinberger和Kernighan的书The AWK Programming Language中有很多很好的awk的例子,请不要让下面这些微不足道的脚本例子限制你对awk强大能力的理解。我们同样假定我们针对price.txt文件进行处理,跟sed一样,awk也只是把结果显示在终端上。
awk脚本 描述
awk '$0 !~ /^$/' price.txt 删除所有空行
awk 'NF > 0' price.txt awk中一个更好的删除所有行的办法
awk '$2 ~ /^[JT]/ {print $3}' price.txt 打印所有第二个字段是'J'或者'T'打头的行中的第三个字段
awk '$2 !~ /[Mm]isc/ {print $3 + $4}' price.txt 针对所有第二个字段不包含'Misc'或者'misc'的行,打印第3和第4列的和(假定为数字)
awk '$3 !~ /^[0-9]+\.[0-9]*$/ {print $0}' price.txt 打印所有第三个字段不是数字的行,这里数字是指d.d或者d这样的形式,其中d是0到9的任何数字
awk '$2 ~ /John|Fred/ {print $0}' price.txt 如果第二个字段包含'John'或者'Fred'则打印整行
grep
grep是一个用来在一个或者多个文件或者输入流中使用RE进行查找的程序。它的name编程语言可以用来针对文件和管道进行处理。可以在手册中得到关于grep的完整信息。这个同样古怪的名字来源于vi的一个命令,g/re/p,意思是global regular expression print。
下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
Francis, John 5-3871
Wong, Fred 4-4123
Jones, Thomas 1-4122
Salazar, Richard 5-2522
grep命令 描述
grep '\t5-...1' phone.txt 把所有电话号码以5开头以1结束的行打印出来,注意制表符是用\t表示的
grep '^S[^ ]* R' phone.txt 打印所有姓以S打头和名以R打头的行
grep '^[JW]' phone.txt 打印所有姓开头是J或者W的行
grep ', ....\t' phone.txt 打印所有姓是4个字符的行,注意制表符是用\t表示的
grep -v '^[JW]' phone.txt 打印所有不以J或者W开头的行
grep '^[M-Z]' phone.txt 打印所有姓的开头是M到Z之间任一字符的行
grep '^[M-Z].*[12]' phone.txt 打印所有姓的开头是M到Z之间任一字符,并且点号号码结尾是1或者2的行
egrep
egrep是grep的一个扩展版本,它在它的正则表达式中支持更多的元字符。下面的例子中我们假定在文件phone.txt中包含以下的文本,——其格式是姓加一个逗号,然后是名,然后是一个制表符,然后是电话号码:
Francis, John 5-3871
Wong, Fred 4-4123
Jones, Thomas 1-4122
Salazar, Richard 5-2522
egrep command Description
egrep '(John|Fred)' phone.txt 打印所有包含名字John或者Fred的行
egrep 'John|22$|^W' phone.txt 打印所有包含John 或者以22结束或者以W的行
egrep 'net(work)?s' report.txt 从report.txt中找到所有包含networks或者nets的行
正则表达式语法支持情况命令或环境 . [ ] ^ $ \( \) \{ \} ? + | ( )
vi X X X X X
Visual C++ X X X X X
awk X X X X X X X X
sed X X X X X X
Tcl X X X X X X X X X
ex X X X X X X
grep X X X X X X
egrep X X X X X X X X X
fgrep X X X X X
perl X X X X X X X X X
vi替换命令简介
Vi的替换命令:
:ranges/pat1/pat2/g
其中
: 这是Vi的命令执行界面。
range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
s 表示其后是一个替换命令。
pat1 这是要查找的一个正则表达式,这篇文章中有一大堆例子。
pat2 这是希望把匹配串变成的模式的正则表达式,这篇文章中有一大堆例子。
g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。
网上有很多vi的在线手册,你可以访问他们以获得更加完整的信息。
[回到主页]
程序员每天该做的事
程序员每天该做的事
1、总结自己一天任务的完成情况
最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多。
2、考虑自己明天应该做的主要工作
把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作。
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法
出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢。
4、考虑自己一天工作完成的质量和效率能否还能提高
一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍。
5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态
闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示。
6、记住一位同事的名字及其特点
你认识公司的所有同事吗?你了解他们吗?
7、清理自己的代码
今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?
8、清理自己的桌面
当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净。
程序员每周该做的事
1、向你的老板汇报一次工作
让你的老板知道你在做什么,这很重要。可以口头、书面、邮件,看你老板的工作方式而定。
2、进行一次自我总结(非正式)
这周之内自己表现得怎么样?该加分还是扣分?
3、制定下周计划
把下周要做的事情列出来,一样要分清楚优先级。
4、整理自己的文件夹、书柜和电脑文件
把桌面以外的地方也要清理干净,电脑的文件夹,收到的邮件,把过时的垃圾全部清理掉。
5、与一个非公司的朋友沟通
它山之石,可以攻玉。
6、看一本杂志
找一本适合自己的专业杂志。
7、纠正自己或同事一个细节上的不正确做法
《细节决定成败》看过了吗?没看过强烈建议先看看。
程序员每月该做的事
1、至少和一个同事一起吃饭或喝茶
不光了解自己工作伙伴的工作,还要了解他们的生活。
2、自我考核一次
相对正式地考核自己一下,你对得起这个月的工资吗?
3、对你的同事考核一次
你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?
4、制定下月的计划,确定下月的工作重点
5、总结自己工作质量改进状况
自己的质量提高了多少?
6、有针对性地对一项工作指标做深入地分析并得出改进的方案
可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。
7、与老板沟通一次
最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点。
程序员每年该做的事
1、年终总结
每个公司都会做的事情,但你真正认真地总结过自己吗?
2、兑现给自己、给家人的承诺
给老婆、儿子的新年礼物买了没有?给自己的呢?
3、下年度工作规划
好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?
4、掌握一项新技术
至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog 。
5、推出一种新产品
可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的。
6、与父母团聚一次
常回家看看,常回家看看。
1、总结自己一天任务的完成情况
最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多。
2、考虑自己明天应该做的主要工作
把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作。
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法
出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢。
4、考虑自己一天工作完成的质量和效率能否还能提高
一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍。
5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态
闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示。
6、记住一位同事的名字及其特点
你认识公司的所有同事吗?你了解他们吗?
7、清理自己的代码
今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?
8、清理自己的桌面
当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净。
程序员每周该做的事
1、向你的老板汇报一次工作
让你的老板知道你在做什么,这很重要。可以口头、书面、邮件,看你老板的工作方式而定。
2、进行一次自我总结(非正式)
这周之内自己表现得怎么样?该加分还是扣分?
3、制定下周计划
把下周要做的事情列出来,一样要分清楚优先级。
4、整理自己的文件夹、书柜和电脑文件
把桌面以外的地方也要清理干净,电脑的文件夹,收到的邮件,把过时的垃圾全部清理掉。
5、与一个非公司的朋友沟通
它山之石,可以攻玉。
6、看一本杂志
找一本适合自己的专业杂志。
7、纠正自己或同事一个细节上的不正确做法
《细节决定成败》看过了吗?没看过强烈建议先看看。
程序员每月该做的事
1、至少和一个同事一起吃饭或喝茶
不光了解自己工作伙伴的工作,还要了解他们的生活。
2、自我考核一次
相对正式地考核自己一下,你对得起这个月的工资吗?
3、对你的同事考核一次
你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?
4、制定下月的计划,确定下月的工作重点
5、总结自己工作质量改进状况
自己的质量提高了多少?
6、有针对性地对一项工作指标做深入地分析并得出改进的方案
可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。
7、与老板沟通一次
最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点。
程序员每年该做的事
1、年终总结
每个公司都会做的事情,但你真正认真地总结过自己吗?
2、兑现给自己、给家人的承诺
给老婆、儿子的新年礼物买了没有?给自己的呢?
3、下年度工作规划
好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?
4、掌握一项新技术
至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog 。
5、推出一种新产品
可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的。
6、与父母团聚一次
常回家看看,常回家看看。
Wednesday, May 16, 2007
摘——郁闷的时候看一下
01 记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
02 能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。
03 怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分。
04 智慧的代价是矛盾。这是人生对人生观开的玩笑。
05 世上的姑娘总以为自己是骄傲的公主(除了少数极丑和少数极聪明的姑娘例外)。
06 如果敌人让你生气,那说明你还没有胜他的把握。
07 如果朋友让你生气,那说明你仍然在意他的友情。
08 令狐冲说“有些事情本身我们无法控制,只好控制自己。”
09 我不知道我现在做的哪些是对的,那些是错的,而当我终于老死的时候我才知道这些。所以我现在所能做的就是尽力做好待着老死。
10 也许有些人很可恶,有些人很卑鄙。而当我设身为他想象的时候,我才知道:他比我还可怜。所以请原谅所有你见过的人,好人或者坏人。
11 鱼对水说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。
12 快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤.请让我们从容面对这离别之后的离别。微笑地去寻找一个不可能出现的你!
13 死亡教会人一切,如同考试之后公布的结果——虽然恍然大悟,但为时晚矣~!
14 你出生的时候,你哭着,周围的人笑着;你逝去的时候,你笑着,而周围的人在哭!一切都是轮回! 我们都在轮回中!
15 男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多。
16 于千万人之中,遇见你所遇见的人;于千万年之中,时间的无涯荒野里,没有早一步,也没有晚一步,刚巧赶上了.
17 每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨。
18 人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己。
19 当幻想和现实面对时,总是很痛苦的。要么你被痛苦击倒,要么你把痛苦踩在脚下。
20 真正的爱情是不讲究热闹不讲究排场不讲究繁华更不讲究嚎头的。
21 生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?
22 我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使我感奋不已。
23 我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。
24 后悔是一种耗费精神的情绪.后悔是比损失更大的损失,比错误更大的错误.所以不要后悔 。
25 日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦
02 能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。
03 怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分。
04 智慧的代价是矛盾。这是人生对人生观开的玩笑。
05 世上的姑娘总以为自己是骄傲的公主(除了少数极丑和少数极聪明的姑娘例外)。
06 如果敌人让你生气,那说明你还没有胜他的把握。
07 如果朋友让你生气,那说明你仍然在意他的友情。
08 令狐冲说“有些事情本身我们无法控制,只好控制自己。”
09 我不知道我现在做的哪些是对的,那些是错的,而当我终于老死的时候我才知道这些。所以我现在所能做的就是尽力做好待着老死。
10 也许有些人很可恶,有些人很卑鄙。而当我设身为他想象的时候,我才知道:他比我还可怜。所以请原谅所有你见过的人,好人或者坏人。
11 鱼对水说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。
12 快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤.请让我们从容面对这离别之后的离别。微笑地去寻找一个不可能出现的你!
13 死亡教会人一切,如同考试之后公布的结果——虽然恍然大悟,但为时晚矣~!
14 你出生的时候,你哭着,周围的人笑着;你逝去的时候,你笑着,而周围的人在哭!一切都是轮回! 我们都在轮回中!
15 男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多。
16 于千万人之中,遇见你所遇见的人;于千万年之中,时间的无涯荒野里,没有早一步,也没有晚一步,刚巧赶上了.
17 每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨。
18 人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己。
19 当幻想和现实面对时,总是很痛苦的。要么你被痛苦击倒,要么你把痛苦踩在脚下。
20 真正的爱情是不讲究热闹不讲究排场不讲究繁华更不讲究嚎头的。
21 生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?
22 我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使我感奋不已。
23 我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。
24 后悔是一种耗费精神的情绪.后悔是比损失更大的损失,比错误更大的错误.所以不要后悔 。
25 日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦
Wednesday, April 18, 2007
男人感悟99条
1:能不抽烟最好不抽,它或许可以帮助你吸引一些女生,但不抽绝不会招来厌烦,表现男子气概的途径有很多,没必要拿健康做赌注。
2:给自己定目标,一年,两年,五年,也许你出生不如别人好,通过努力,往往可以改变70%的命运。破罐子破摔只能和懦弱做朋友。
3:找女朋友外表是第一关,但要了解她的品行之后再做打算也不迟。
4:不要在乎小钱,工作的人都后悔从前对自己的GF不够好。记住你们的重要日子,你们的谈话,女生要敏感得多,这样做,至少可以证明你对她的重视。
5:爱她,但别怕她,你们是恋人,也是朋友,她要的不是宠物,这样的感情,走不长远。
6:她要是病了,带她去医院,她害怕时,找个人少的地方抱着她,给她勇气,帮她排队,挂号,放下你那点可悲的面子,周围人只会向她投来羡慕的眼光,不会对你说三道四。
7:别把两个人的生活绞在一起,空间才是爱情的长寿药。不要经常吃醋,谁都有异性朋友,该吃的时候才吃,并且让她知道。
8:善待她的朋友,即使她讨厌的人,你也没资格说坏话,你要做的,就是静静的听她倾诉。适当给她安慰。有时候,她们更需要依靠,即使你们都还是学生。
9:不要问她过去,时机到了,她会毫无保留的告诉你。她要是想见从前那位,让她去,原因是你不让她去,她也会去。为何不表现得大度点,但要让她知道你相当的郁闷。
10:珍惜身边人,不要见异思迁,大家都需要安定。即使对方比你GF漂亮10倍,还主动靠近你,给你暗号,请严肃的告诉她,你有女朋友!
11:她开始管你的生活,你的钱 ,对你唠叨,频繁发消息询问你的位置。别担心,她只是把自己交给了你,害怕失去你。
12:带她去你从前常去的地方,她内心会无比快乐,你失意时,她会在第一时间找到你。
13:发生口角后,别关机,也别在街上和其他异性闲逛,那只能使矛盾激化。
14:过生日,送她草莓蛋糕,不要太大,但要足够精致,把你对她的腻称放在蛋糕上。再买一个大的,让她和朋友一起过。
15:牵手时,即使你的手有多汗,也别放开。
16:把她介绍给你最好的朋友,包括异性朋友。
17:别总是让她打电话来,她也需要被重视的感觉。
18:衣着尽量和她的品位搭调,即使你要提升品质,请带上她一起。
19:别偷看她的隐私,不要去猜测,在一起是缘分,离开也是缘分。
20:如果失恋,不要轻信江湖上传言的借酒消愁,吐的滋味不好受,即使喝了,也别急着喝茶,茶不但不能解酒,反而还会伤肾。
21:不要整天想着如何重修旧好,除了爱情,前面还有许多问题需要你去解决。这是个现实的社会,感情不能当饭吃,贫穷夫妻百事哀。不要相信电影,那只是个供许多陌生人喧嚣情感的场所。
22:分手之后,可以伤心难过,但过渡期不能太长,因为这期间是绝佳的学习和工作时间。
23:如果你实在奈不住寂寞,至少等上大半年,否则你不仅否定了她,也否定了你自己。
24:当她不再爱你的时候,无论你有多想她也别打电话告诉她,因为有些人会记住第一个,而有些人只会记住上一个。
25:好朋友里面,一定要培养出一个知己,不要以为你有多么八面玲珑,到处是朋友,最后真心对你的,只有一个,相信我。
26:她的离开如若是一个重大打击,找间手艺不错的发型设计理个发,这样可以让你涣然一新。
27:不要去打扰她的生活,她只会觉得从前看错人,你也会鄙视自己。
28:你们在街上相遇,请向她微笑,把微笑留给伤你最深的人。 29:告诉周围人,你和她已经分手,避免他们给你打报告,哪天又看见谁谁谁了。
30:不要相信星座命理,那是哄小朋友的,命运在自己手中。难道你想等出栋房子或是车子?
31:你的朋友最好以你自己为中心发散,允许少数支点连接,千万不要把朋友圈变成密不透风的多边型,你要为自己留底牌。
32:不喜欢的人少接触,但别在背后说坏话,说是非之人,必定是是非之人,谨记,祸从口出。
33:朋友圈里的你,平时都很忍让,请注意适当拿出你的主见。反之,不要太计较。
34:给老师或者领导留下好印象,他们不会在你沉沦时再踩你几脚,相反可能会拉你一把。在社交中,原则是跌停股,世俗是潜力股。
35:少玩游戏,这不是韩国,你打不出房子车子还有女人。进了大学,就进了社会,这是场马拉松。北京现在一个砖头抛上去,砸下来7,8个研究生受伤,现在的你是否该有点打算。
36:拿出极限,尽力而为。你要想的是成功,而不是失败。所以面对困难首先就是拿出信心。除了你心爱女人的鼓励,这应该是最有用的东西。
37:定时整理书桌书柜,良好的精神面貌可以让你事半功倍。
38:学好英语,那些说学英语没用的暂时可以不去管,他们要么年纪大了,要么就是自己早过了CET6准备托福了,在这里哗众取宠。你可以不拿证,但一定要学好。
39:不是足够热爱你的专业,并且学出来前途不够光明,趁早转业。现在更多人更看重“钱途”
40:知道自己要干什么,寝室的卧谈会的确可以帮你磨嘴皮子,夜深人静,问问自己,将来的打算,并朝着那个方向去实现。
41:偶尔翻翻时尚类的杂志,女朋友和女性朋友都可以从中受益。
42:尽量少看A片,正常的男人即使是单身,也不会成天迷恋肉欲。而每次你SY后都会有大量锌元素流失,此元素与你大脑活动有密切联系。
43:坚持做运动,俯卧撑可以锻炼你的胸肌和腹肌,请记住游泳圈是成功人事才有资格拥有的奢侈品。
44:每天早上一杯水,预防胆结实。睡前一小时不要喝水,否则会过早出现眼袋。
45:宁愿要深色袜子也少买白色的,这样会让人觉得你不够成熟,学生朋友自便。
46:新同事或新朋友请你吃饭,不要觉得理所当然,请礼尚往来,否则你的名声会越来越臭。无论是大学还是公司,很多故事都是听来的。
47:有男友的女人不要碰,即便你想one night stand 也要做好心理准备。后果同上,严重时会出现体肤之痛。
48:朋友的女人不要碰,无论是现在的还是曾经的,后果同上。要知道,男人经营自己就像经营一个公司,要树立品牌文化。想问为什么的朋友请先做个你是受害者的假设,再跟我发短消息讨论。
49:博爱的女人不要碰,往往这种女人连自己要什么都不知道,我想没人愿意和若干成年男性分享自己的爱。天作孽,犹可活,自作孽,不可活。
50:没主见,不上进,懒惰的女人不要碰。就算你有钱,你有的是钱,最终你也会厌烦其中。何况不见得她们个个都是花瓶,何况你还有审美疲劳。
51:不以物喜,不以己悲,我知道这很难,但要成功,这是必修课。
52:空闲时间不要全拿去泡BAR,读点文学作品,学习一些经营流程,管理规范,国际时事,法律常识。这能保证你在任何聚会都有谈资。
53:每年回母校看看那些为你付出过的老师,走上社会你才了解她们才是无私的,比起那点学费,她们简直太伟大了。学会感恩。
54:回家帮父母做点简单家务,陪他们买菜,做饭,逛街,冬天送他们一人一件羽绒服,他们并不奢望什么,但他们需要得到你的承认,中国的父母是最苦的,孩子是最幸福的。(离婚除外)
55:大家都年轻,没什么钱,不用太在意谁谁又穿AD ,NIKE ,或者其他。而GF对于PRADA,蓝寇,CD,LV,的热恋,你也不必放在心上,女人天生和美挂上了勾,她们只是宁愿相信你能够为她们买一样昂贵的礼物,以满足她们的虚荣心,然后在同伴面前炫耀一番。实则她们也是热爱生活的,而当你有能力完成时,也会觉得把她包装得漂漂亮亮的很是欣慰。
56:告诉她,你喜欢的内衣。或者在UNDERWEAR店要打佯时陪她去买。
57:欺负她时,请带上套子,如不习惯,请自行解决,直到无法忍受为止,或者泼自己一身冷水。流产很痛苦,我只是听说。
58:有正义感,但请更理智,你父母不希望养育二十多年的儿子化为泡影。但当她遇到流氓时,请你勇敢的挡在她前面。大声说话可以让你的勇气迅速提升。(这是我答辩时认识到的)
59:最好不要在她面前玩天真,多数MM都不喜欢,除非她要求。
60:接吻前先嚼块口香糖,接吻时请闭上眼睛,睁开时,告诉你有多爱她。
61:尊重每一个人,包括为你擦鞋的,卖报的,环卫工人...等等。
62:接到陌生电话请先说,“你好,找哪位”
63:想发脾气时,尽量忍,忍不住就去厕所蹲半个小时,或是找个海拔较高的地方站半个小时。
64:如果GF要跟你吵,尽量克制,不能避免时,跟她吵,吵架是最好的交流方式。你们互相可以得到心里渴望已久的答案。但别带脏字,别把对方的亲戚带出来,最后尽量妥协,有些事,只能暂时妥协。不要把问题留过夜。
65:出差回来给她一个惊喜,并带上礼物。(想在这条上跟我开玩笑的朋友,请私下跟我开)
66:在她兜里放些零钱,在她不常用的兜里放张一百。
67:尊老爱幼,帮助别人后,你会感到无比轻松快乐。
68:去市场买东西,杀价先杀四分之三,现在杀一半行不通了。
69:如果可以,给你的对手留条生路,钱是赚不完的。这个世界上,没有天生的敌人。
70:饮水思源,永远做一个有思想的人,即使你不会有大成就,钱也会足够花。
71:为她学一首歌,如果可能,结婚时当着大家的面唱给她听。
72:要做一件事,成功之前,没必要告诉其他人,成功之后,和他们分享快乐。
73:每年去寺庙为家人点几盏油灯,告诉自己的良心,你不在的时候,同样是爱他们的。
74:学会察言观色,不要意气用事,否则会有许多不必要的麻烦。
75:享受孤独,地球不会因为只有你一个人而停止转动,也许她会很晚才出现,在此之前,你要学会正确利用时间,并且让自己发光发亮。
76:从前的她,深夜给你打电话,如果你还爱她,接电话。如果你不爱她,关机。(没听见不在讨论范围之内)
77:夜里的约会最好不要选择偏僻的地方,有些突发事件,会让你痛不欲生。如果你还爱她的话。
78:公司的东西不要带回家,即使有小便宜,也别参与,在你成为领导前,也别指责,这是你管不到的。
79:开发你的另外一个情感宣泄功能,倾听。
80:朋友之间不要合作做生意,或者办公司。麻烦会接踵而来。你要减轻负担,减小风险,可以,找陌生人。
81:今日事,今日毕,不要日复一日,年复一年。不然到你60岁,你还告诉孙子,爷爷明年一定要毕业!
82:感谢曾经爱过你的人,她祝福你的短信,一定要回。
83:朋友之间发生争执,不要次次都是忍让,每个人都有坚持自己的权利,让他们知道你的想法,你所坚持的。没关系,不出两天,你们又是好朋友。
84:说该说的,不说不该说的。对朋友,也应当有所保留。对她,不要把她和从前那个相提并论,谁都受不了。 85:头发,指甲,胡子,打理好。社会是个排斥性的接受体,这个星球所需要的艺术家极其有限,请不要冒这个险,就算你留长头发比较好看,也要尽量给人干净的感觉。
86:牌局可有可无,那不是年轻人该干的,除非工作需要,否则不要培养这种兴趣。当你看见GF坐在赌博机面前聚精会神的呐喊着某张牌时,你是什么感觉?
87:每学期给自己写总结,上课认真学习,所谓的好好学习,天天向上,学好了,就是最管用的绝招。机会常常伪装成麻烦,从你身边路过,也只会留给做好准备的人。上班的朋友同理。
88:不要整天把国家大事摆在嘴上,去改变你能改变的,接受你无法改变的。
89:选一个生日陪你母亲过,那也是她的受难日。不要年年都和同样一群人过。到头来,全心为你的,只有她。
90:有了手机,尽量少上网,就算你仅仅是看新闻,读文章,大把时间也会不经意从你身边流失。
91:不要以为你是个男人,就不需要保养。至少饮食方面不能太随便,多吃番茄,海产品,韭菜,香蕉,都是对男性健康有益处的食物。你要是看不到价值,我可以告诉你。至少你能把看病节约下来的钱给她多买几盒DIOR。
92:善待小动物,你以后也有子子孙孙,同样是生命,培养一下自己的爱心吧。这并不表示你懦弱。
93:如果考公务员,要有十足的心理准备。早点开始托关系吧,还不见得一定就有收效。
94:力求上进的人,不要总想着靠谁谁,人都是自私的,自己才是最靠得住的人。
95:如果你们相处几年下来,她开始冷落你,对你不闻不问,请别怪她,让她离开。给不了她幸福,给她自由。
96:如果你想和她说分手,请在考试之后,人都是脆弱的。
97:她给你买礼物,你可以高兴,但不要太高兴。人生就是场经营,有人经营感情,有人经营利益,有人经营幸福,而有人经营阴谋。
98:面对失败,不要太计较,天将降大任于斯人也,必先苦其心志,劳其筋骨,饿起体肤....但要学会自责,找到原因,且改掉坏习惯。二十岁没钱,那很正常,三十岁没钱,那是宿命。
99:学会微笑,以后在很多场合都用得上它。如何让微笑好看,首先你得拥有健康的牙齿。如何保证牙齿健康,一,早晚,饭后刷牙;二,每年去探望一次牙科医生;三,少管闲事。
2:给自己定目标,一年,两年,五年,也许你出生不如别人好,通过努力,往往可以改变70%的命运。破罐子破摔只能和懦弱做朋友。
3:找女朋友外表是第一关,但要了解她的品行之后再做打算也不迟。
4:不要在乎小钱,工作的人都后悔从前对自己的GF不够好。记住你们的重要日子,你们的谈话,女生要敏感得多,这样做,至少可以证明你对她的重视。
5:爱她,但别怕她,你们是恋人,也是朋友,她要的不是宠物,这样的感情,走不长远。
6:她要是病了,带她去医院,她害怕时,找个人少的地方抱着她,给她勇气,帮她排队,挂号,放下你那点可悲的面子,周围人只会向她投来羡慕的眼光,不会对你说三道四。
7:别把两个人的生活绞在一起,空间才是爱情的长寿药。不要经常吃醋,谁都有异性朋友,该吃的时候才吃,并且让她知道。
8:善待她的朋友,即使她讨厌的人,你也没资格说坏话,你要做的,就是静静的听她倾诉。适当给她安慰。有时候,她们更需要依靠,即使你们都还是学生。
9:不要问她过去,时机到了,她会毫无保留的告诉你。她要是想见从前那位,让她去,原因是你不让她去,她也会去。为何不表现得大度点,但要让她知道你相当的郁闷。
10:珍惜身边人,不要见异思迁,大家都需要安定。即使对方比你GF漂亮10倍,还主动靠近你,给你暗号,请严肃的告诉她,你有女朋友!
11:她开始管你的生活,你的钱 ,对你唠叨,频繁发消息询问你的位置。别担心,她只是把自己交给了你,害怕失去你。
12:带她去你从前常去的地方,她内心会无比快乐,你失意时,她会在第一时间找到你。
13:发生口角后,别关机,也别在街上和其他异性闲逛,那只能使矛盾激化。
14:过生日,送她草莓蛋糕,不要太大,但要足够精致,把你对她的腻称放在蛋糕上。再买一个大的,让她和朋友一起过。
15:牵手时,即使你的手有多汗,也别放开。
16:把她介绍给你最好的朋友,包括异性朋友。
17:别总是让她打电话来,她也需要被重视的感觉。
18:衣着尽量和她的品位搭调,即使你要提升品质,请带上她一起。
19:别偷看她的隐私,不要去猜测,在一起是缘分,离开也是缘分。
20:如果失恋,不要轻信江湖上传言的借酒消愁,吐的滋味不好受,即使喝了,也别急着喝茶,茶不但不能解酒,反而还会伤肾。
21:不要整天想着如何重修旧好,除了爱情,前面还有许多问题需要你去解决。这是个现实的社会,感情不能当饭吃,贫穷夫妻百事哀。不要相信电影,那只是个供许多陌生人喧嚣情感的场所。
22:分手之后,可以伤心难过,但过渡期不能太长,因为这期间是绝佳的学习和工作时间。
23:如果你实在奈不住寂寞,至少等上大半年,否则你不仅否定了她,也否定了你自己。
24:当她不再爱你的时候,无论你有多想她也别打电话告诉她,因为有些人会记住第一个,而有些人只会记住上一个。
25:好朋友里面,一定要培养出一个知己,不要以为你有多么八面玲珑,到处是朋友,最后真心对你的,只有一个,相信我。
26:她的离开如若是一个重大打击,找间手艺不错的发型设计理个发,这样可以让你涣然一新。
27:不要去打扰她的生活,她只会觉得从前看错人,你也会鄙视自己。
28:你们在街上相遇,请向她微笑,把微笑留给伤你最深的人。 29:告诉周围人,你和她已经分手,避免他们给你打报告,哪天又看见谁谁谁了。
30:不要相信星座命理,那是哄小朋友的,命运在自己手中。难道你想等出栋房子或是车子?
31:你的朋友最好以你自己为中心发散,允许少数支点连接,千万不要把朋友圈变成密不透风的多边型,你要为自己留底牌。
32:不喜欢的人少接触,但别在背后说坏话,说是非之人,必定是是非之人,谨记,祸从口出。
33:朋友圈里的你,平时都很忍让,请注意适当拿出你的主见。反之,不要太计较。
34:给老师或者领导留下好印象,他们不会在你沉沦时再踩你几脚,相反可能会拉你一把。在社交中,原则是跌停股,世俗是潜力股。
35:少玩游戏,这不是韩国,你打不出房子车子还有女人。进了大学,就进了社会,这是场马拉松。北京现在一个砖头抛上去,砸下来7,8个研究生受伤,现在的你是否该有点打算。
36:拿出极限,尽力而为。你要想的是成功,而不是失败。所以面对困难首先就是拿出信心。除了你心爱女人的鼓励,这应该是最有用的东西。
37:定时整理书桌书柜,良好的精神面貌可以让你事半功倍。
38:学好英语,那些说学英语没用的暂时可以不去管,他们要么年纪大了,要么就是自己早过了CET6准备托福了,在这里哗众取宠。你可以不拿证,但一定要学好。
39:不是足够热爱你的专业,并且学出来前途不够光明,趁早转业。现在更多人更看重“钱途”
40:知道自己要干什么,寝室的卧谈会的确可以帮你磨嘴皮子,夜深人静,问问自己,将来的打算,并朝着那个方向去实现。
41:偶尔翻翻时尚类的杂志,女朋友和女性朋友都可以从中受益。
42:尽量少看A片,正常的男人即使是单身,也不会成天迷恋肉欲。而每次你SY后都会有大量锌元素流失,此元素与你大脑活动有密切联系。
43:坚持做运动,俯卧撑可以锻炼你的胸肌和腹肌,请记住游泳圈是成功人事才有资格拥有的奢侈品。
44:每天早上一杯水,预防胆结实。睡前一小时不要喝水,否则会过早出现眼袋。
45:宁愿要深色袜子也少买白色的,这样会让人觉得你不够成熟,学生朋友自便。
46:新同事或新朋友请你吃饭,不要觉得理所当然,请礼尚往来,否则你的名声会越来越臭。无论是大学还是公司,很多故事都是听来的。
47:有男友的女人不要碰,即便你想one night stand 也要做好心理准备。后果同上,严重时会出现体肤之痛。
48:朋友的女人不要碰,无论是现在的还是曾经的,后果同上。要知道,男人经营自己就像经营一个公司,要树立品牌文化。想问为什么的朋友请先做个你是受害者的假设,再跟我发短消息讨论。
49:博爱的女人不要碰,往往这种女人连自己要什么都不知道,我想没人愿意和若干成年男性分享自己的爱。天作孽,犹可活,自作孽,不可活。
50:没主见,不上进,懒惰的女人不要碰。就算你有钱,你有的是钱,最终你也会厌烦其中。何况不见得她们个个都是花瓶,何况你还有审美疲劳。
51:不以物喜,不以己悲,我知道这很难,但要成功,这是必修课。
52:空闲时间不要全拿去泡BAR,读点文学作品,学习一些经营流程,管理规范,国际时事,法律常识。这能保证你在任何聚会都有谈资。
53:每年回母校看看那些为你付出过的老师,走上社会你才了解她们才是无私的,比起那点学费,她们简直太伟大了。学会感恩。
54:回家帮父母做点简单家务,陪他们买菜,做饭,逛街,冬天送他们一人一件羽绒服,他们并不奢望什么,但他们需要得到你的承认,中国的父母是最苦的,孩子是最幸福的。(离婚除外)
55:大家都年轻,没什么钱,不用太在意谁谁又穿AD ,NIKE ,或者其他。而GF对于PRADA,蓝寇,CD,LV,的热恋,你也不必放在心上,女人天生和美挂上了勾,她们只是宁愿相信你能够为她们买一样昂贵的礼物,以满足她们的虚荣心,然后在同伴面前炫耀一番。实则她们也是热爱生活的,而当你有能力完成时,也会觉得把她包装得漂漂亮亮的很是欣慰。
56:告诉她,你喜欢的内衣。或者在UNDERWEAR店要打佯时陪她去买。
57:欺负她时,请带上套子,如不习惯,请自行解决,直到无法忍受为止,或者泼自己一身冷水。流产很痛苦,我只是听说。
58:有正义感,但请更理智,你父母不希望养育二十多年的儿子化为泡影。但当她遇到流氓时,请你勇敢的挡在她前面。大声说话可以让你的勇气迅速提升。(这是我答辩时认识到的)
59:最好不要在她面前玩天真,多数MM都不喜欢,除非她要求。
60:接吻前先嚼块口香糖,接吻时请闭上眼睛,睁开时,告诉你有多爱她。
61:尊重每一个人,包括为你擦鞋的,卖报的,环卫工人...等等。
62:接到陌生电话请先说,“你好,找哪位”
63:想发脾气时,尽量忍,忍不住就去厕所蹲半个小时,或是找个海拔较高的地方站半个小时。
64:如果GF要跟你吵,尽量克制,不能避免时,跟她吵,吵架是最好的交流方式。你们互相可以得到心里渴望已久的答案。但别带脏字,别把对方的亲戚带出来,最后尽量妥协,有些事,只能暂时妥协。不要把问题留过夜。
65:出差回来给她一个惊喜,并带上礼物。(想在这条上跟我开玩笑的朋友,请私下跟我开)
66:在她兜里放些零钱,在她不常用的兜里放张一百。
67:尊老爱幼,帮助别人后,你会感到无比轻松快乐。
68:去市场买东西,杀价先杀四分之三,现在杀一半行不通了。
69:如果可以,给你的对手留条生路,钱是赚不完的。这个世界上,没有天生的敌人。
70:饮水思源,永远做一个有思想的人,即使你不会有大成就,钱也会足够花。
71:为她学一首歌,如果可能,结婚时当着大家的面唱给她听。
72:要做一件事,成功之前,没必要告诉其他人,成功之后,和他们分享快乐。
73:每年去寺庙为家人点几盏油灯,告诉自己的良心,你不在的时候,同样是爱他们的。
74:学会察言观色,不要意气用事,否则会有许多不必要的麻烦。
75:享受孤独,地球不会因为只有你一个人而停止转动,也许她会很晚才出现,在此之前,你要学会正确利用时间,并且让自己发光发亮。
76:从前的她,深夜给你打电话,如果你还爱她,接电话。如果你不爱她,关机。(没听见不在讨论范围之内)
77:夜里的约会最好不要选择偏僻的地方,有些突发事件,会让你痛不欲生。如果你还爱她的话。
78:公司的东西不要带回家,即使有小便宜,也别参与,在你成为领导前,也别指责,这是你管不到的。
79:开发你的另外一个情感宣泄功能,倾听。
80:朋友之间不要合作做生意,或者办公司。麻烦会接踵而来。你要减轻负担,减小风险,可以,找陌生人。
81:今日事,今日毕,不要日复一日,年复一年。不然到你60岁,你还告诉孙子,爷爷明年一定要毕业!
82:感谢曾经爱过你的人,她祝福你的短信,一定要回。
83:朋友之间发生争执,不要次次都是忍让,每个人都有坚持自己的权利,让他们知道你的想法,你所坚持的。没关系,不出两天,你们又是好朋友。
84:说该说的,不说不该说的。对朋友,也应当有所保留。对她,不要把她和从前那个相提并论,谁都受不了。 85:头发,指甲,胡子,打理好。社会是个排斥性的接受体,这个星球所需要的艺术家极其有限,请不要冒这个险,就算你留长头发比较好看,也要尽量给人干净的感觉。
86:牌局可有可无,那不是年轻人该干的,除非工作需要,否则不要培养这种兴趣。当你看见GF坐在赌博机面前聚精会神的呐喊着某张牌时,你是什么感觉?
87:每学期给自己写总结,上课认真学习,所谓的好好学习,天天向上,学好了,就是最管用的绝招。机会常常伪装成麻烦,从你身边路过,也只会留给做好准备的人。上班的朋友同理。
88:不要整天把国家大事摆在嘴上,去改变你能改变的,接受你无法改变的。
89:选一个生日陪你母亲过,那也是她的受难日。不要年年都和同样一群人过。到头来,全心为你的,只有她。
90:有了手机,尽量少上网,就算你仅仅是看新闻,读文章,大把时间也会不经意从你身边流失。
91:不要以为你是个男人,就不需要保养。至少饮食方面不能太随便,多吃番茄,海产品,韭菜,香蕉,都是对男性健康有益处的食物。你要是看不到价值,我可以告诉你。至少你能把看病节约下来的钱给她多买几盒DIOR。
92:善待小动物,你以后也有子子孙孙,同样是生命,培养一下自己的爱心吧。这并不表示你懦弱。
93:如果考公务员,要有十足的心理准备。早点开始托关系吧,还不见得一定就有收效。
94:力求上进的人,不要总想着靠谁谁,人都是自私的,自己才是最靠得住的人。
95:如果你们相处几年下来,她开始冷落你,对你不闻不问,请别怪她,让她离开。给不了她幸福,给她自由。
96:如果你想和她说分手,请在考试之后,人都是脆弱的。
97:她给你买礼物,你可以高兴,但不要太高兴。人生就是场经营,有人经营感情,有人经营利益,有人经营幸福,而有人经营阴谋。
98:面对失败,不要太计较,天将降大任于斯人也,必先苦其心志,劳其筋骨,饿起体肤....但要学会自责,找到原因,且改掉坏习惯。二十岁没钱,那很正常,三十岁没钱,那是宿命。
99:学会微笑,以后在很多场合都用得上它。如何让微笑好看,首先你得拥有健康的牙齿。如何保证牙齿健康,一,早晚,饭后刷牙;二,每年去探望一次牙科医生;三,少管闲事。
Tuesday, April 10, 2007
MessageBox实现printf
/*-----------------------------------------------------
SCRNSIZE.C -- Displays screen size in a message box
(c) Charles Petzold, 1998
-----------------------------------------------------*/
#include
#include
#include
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
TCHAR szBuffer [1024] ;
va_list pArgList ;
// The va_start macro (defined in STDARG.H) is usually equivalent to:
// pArgList = (char *) &szFormat + sizeof (szFormat) ;
va_start (pArgList, szFormat) ;
// The last argument to wvsprintf points to the arguments
_vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
szFormat, pArgList) ;
// The va_end macro just zeroes out pArgList for no good reason
va_end (pArgList) ;
return MessageBox (NULL, szBuffer, szCaption, 0) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen ;
cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
cyScreen = GetSystemMetrics (SM_CYSCREEN) ;
MessageBoxPrintf (TEXT ("ScrnSize"),
TEXT ("The screen is %i pixels wide by %i pixels high."),
cxScreen, cyScreen) ;
return 0 ;
}
选自Windows程序设计
关于可变参数函数的使用,可以参阅C语言的相关书籍
SCRNSIZE.C -- Displays screen size in a message box
(c) Charles Petzold, 1998
-----------------------------------------------------*/
#include
#include
#include
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
TCHAR szBuffer [1024] ;
va_list pArgList ;
// The va_start macro (defined in STDARG.H) is usually equivalent to:
// pArgList = (char *) &szFormat + sizeof (szFormat) ;
va_start (pArgList, szFormat) ;
// The last argument to wvsprintf points to the arguments
_vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
szFormat, pArgList) ;
// The va_end macro just zeroes out pArgList for no good reason
va_end (pArgList) ;
return MessageBox (NULL, szBuffer, szCaption, 0) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen ;
cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
cyScreen = GetSystemMetrics (SM_CYSCREEN) ;
MessageBoxPrintf (TEXT ("ScrnSize"),
TEXT ("The screen is %i pixels wide by %i pixels high."),
cxScreen, cyScreen) ;
return 0 ;
}
选自Windows程序设计
关于可变参数函数的使用,可以参阅C语言的相关书籍
Monday, February 26, 2007
3ds max sdk配置
编程环境: 3dmax7.0 - 8.0 Visual Studio 2003 (vs7.1)
1. 解压 3dsmaxPluginWizardVS_NET2003.zip
2. 修改 3dsmaxPluginWizard.vsz 中的第五行Param="ABSOLUTE_PATH = C:\3dsmaxPluginWizard" 为Param="ABSOLUTE_PATH = D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcprojects"
3. 拷贝所有的3dsmaxPluginWizardVS_NET2003内的文件到VS2003的目录内D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcprojects
4. 项目设置
4.1 vc2003 项目->属性->c/c++->常规->附加包含目录 设为
4.2 vc2003 项目->属性->c/c++->代码生成->运行时库 设为 <多线程调试 DLL (/MDd)>
4.3 vc2003 项目->属性->链接器->常规->输出文件 设为
4.4 vc2003 项目->属性->链接器->常规->附加库目录 设为
4.5 vc2003 项目->属性->链接器->常规->附加依赖项 添加等 依项插件的需要用到的库
4.6 设置插件输出到max7标准目录 vc2003 项目->属性->生成事件->生成后事件
5. 完成
1. 解压 3dsmaxPluginWizardVS_NET2003.zip
2. 修改 3dsmaxPluginWizard.vsz 中的第五行Param="ABSOLUTE_PATH = C:\3dsmaxPluginWizard" 为Param="ABSOLUTE_PATH = D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcprojects"
3. 拷贝所有的3dsmaxPluginWizardVS_NET2003内的文件到VS2003的目录内D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\vcprojects
4. 项目设置
4.1 vc2003 项目->属性->c/c++->常规->附加包含目录 设为
4.2 vc2003 项目->属性->c/c++->代码生成->运行时库 设为 <多线程调试 DLL (/MDd)>
4.3 vc2003 项目->属性->链接器->常规->输出文件 设为
4.4 vc2003 项目->属性->链接器->常规->附加库目录 设为
4.5 vc2003 项目->属性->链接器->常规->附加依赖项 添加
4.6 设置插件输出到max7标准目录 vc2003 项目->属性->生成事件->生成后事件
5. 完成
Thursday, November 16, 2006
金庸小说人物性能力排行
1、阳顶天:恐怕是世上最强的人了
2、球千丈:仅次于第一
3、国茎:此人为国宝
4、没操疯:比的就是耐力
5、绝户手圣阴师太:男人都成了一次性用品
6、瞄人缝:BT
7、翘疯:不愧是丐帮帮主
8、矛十八:……
9、王欲阉:最毒妇人心!
10、户必裂:元朝皇帝果然不是盖的
11、洞房不败:这人妖……
12、阳连挺:洞房不败的姘头,简直就是绝配
13、阳铁芯、阳亢、阳过:这祖孙三人同属精力旺盛型
14、候人阴:色鬼一个
15、泰山派玉鸡子:无价之宝,就是不知道能不能用
16、蒋四根、吴三龟、王重阳:真不知道他们是怎么长的,虽然比不上茅十八
17、任淫淫:看来是个经常在宾馆里跑业务的
18、江南七怪里的越女剑含小淫
19、周勃痛:不知道怎么泡上淫姑的……
20、泄迅:持久力还不够
21、你莫抽:和小梅姐比起来简直是天壤之别
22、萎一笑:真tm的乐天派
23、萎小宝:其实我也很奇怪他为什么会有7个老婆
24、虚竹:和尚嘛~可以理解
25、阳消:长得帅也没用
26、断欲:都是他女朋友害的
27、张无鸡:这孩子彻底没救了 .
2、球千丈:仅次于第一
3、国茎:此人为国宝
4、没操疯:比的就是耐力
5、绝户手圣阴师太:男人都成了一次性用品
6、瞄人缝:BT
7、翘疯:不愧是丐帮帮主
8、矛十八:……
9、王欲阉:最毒妇人心!
10、户必裂:元朝皇帝果然不是盖的
11、洞房不败:这人妖……
12、阳连挺:洞房不败的姘头,简直就是绝配
13、阳铁芯、阳亢、阳过:这祖孙三人同属精力旺盛型
14、候人阴:色鬼一个
15、泰山派玉鸡子:无价之宝,就是不知道能不能用
16、蒋四根、吴三龟、王重阳:真不知道他们是怎么长的,虽然比不上茅十八
17、任淫淫:看来是个经常在宾馆里跑业务的
18、江南七怪里的越女剑含小淫
19、周勃痛:不知道怎么泡上淫姑的……
20、泄迅:持久力还不够
21、你莫抽:和小梅姐比起来简直是天壤之别
22、萎一笑:真tm的乐天派
23、萎小宝:其实我也很奇怪他为什么会有7个老婆
24、虚竹:和尚嘛~可以理解
25、阳消:长得帅也没用
26、断欲:都是他女朋友害的
27、张无鸡:这孩子彻底没救了 .
Subscribe to:
Posts (Atom)