不得不承认perl的正则表达式是史上最强悍的语言规则描述符,无论python、还是php、还是ruby都统统向preg靠拢,由此可见一 斑。
这儿说些高阶的正则表达式运用
1. 表达式内部选项
1.1 表达式内部可以设置一些选项(i,m,s,x,U,X),设置方法为’(?’和’)'之间,并且对之后的这些选项之后的表达式产生影响,比如:
(?U)或者他们的组合(?imU)。比如 /ab(?i)c/ 只匹配 “abc” 和 and “abC”。
12 而且可以使用’-'来取消对应的选项,比如(?im-U)。
1.3 如果这些选项设置是出现在子模式内部,则只对该子模式产生影响。比如:(a(?i)b)c 只匹配 “abc” 和 “aBc”。不会匹配abC和aBC
1.4 子模式中,选项后面的表达式都会受影响,这很重要,因为同一个子模式中,选项后面的分支表达式‘|’也会受影响。比如: (a(?i)b|c) 将匹配 “ab”,”aB”,”c” 和 “C”。
2. 表达式子模式
2.1. 正则表达式除了参见的以用’/reg/’标识外,还可以用非字母数字分隔符比如:#,+,~等等符号,比如: #[0-9]#或者~[a-z]~标识
2.2. (a+)表示子模式捕获,表示匹配a开头的,可以通过反向引用1来标识被匹配到的内容,比如匹配’aaa’时,1为’aaa’, 是贪婪匹配(未设置U)。
而(a+?)则是非贪婪,对应的1为’a';
2.3. 正则表达式的反向引用: 1,2等等常常原来反向引用,这个不仅仅可以用在应用匹配结果,也可以用在表达式中间本身,
比如:~(((?i)rah)s+2)~ 匹配 ‘RAH RAH’和’rah rah’,但是不会匹配’RAH rah’
2.4. (?P<name>a+),则会为1取一 个名字叫name,这是子模式命名捕获
2.5. (?:a+),表示需要子模式,但是不捕获,
2.6 进一步,非捕获子模式表达式的内部选项如何设置?按照正常的做法是(?:(?i)xxxxxxxx),’?:‘ 表示非捕获,’?i‘表示内部的i选项,两个括号很繁琐,可以简写为: (?i:xxxxxx)
比如:/(?i:saturday|sunday)/匹配不分大小写的saturday和sunday而且不会捕获。
一个综合使用这些技巧的例子是:
preg_match(‘~the (?P<full_name>(?:red|white) (?P<title>king|queen))~‘,”the white queen”, $matches);
最后 $matches的结果为:
array(5) {
[0]=>
string(15) “the white queen”
["full_name"]=>
string(11) “white queen”
[1]=>
string(11) “white queen”
["title"]=>
string(5) “queen”
[2]=>
string(5) “queen”
}
3.
子模式断言: 测试某个表达式是否以某字符串开头(preceding)或者结尾(following),重要的是它不占用任何的字符串,这里面就有四种结果了:
3.1. 是以字符串结x尾: (?=x)
3.2. 不以字符串结x尾: (?!x)
3.3. 是以字符串x开头: (?<=x)
3. 4. 不以字符串x开头: (?<!x)
比如要把字符串: f1:a|f2:b|f3[|] , 用竖线’|'分割成数组,但是在方括号内的竖线’|'不要分割,使用表达式: /(?<![)|(?!])/ 即可,两个否定断言:前向和后向的就可以搞定。
多个断言可以同时以任意顺序出现,比如: /(?<=d{3})(?<!999)foo/会匹配除999以外的三位数开头的foo,但是不会匹配234abcfoo
多个断言可以嵌套: /(?<=(?<!foo)bar)baz/, 匹配以bar开头的baz,但是要求bar不以foo 开头,
三月 8th, 2012 | 生活小札 | No Comments »
输入命令的时候,出来个tooltips干扰你的视线,比如下面那个黄色的”Total Commadner”提示框,是不是很不爽?

说实话,用了这么多年windows,真的不知道怎关掉这个东西,google一番,有说”explorer.exe 进程的第一个 tooltips_class32″类窗口的,
还有推荐什么工具的,其实答 案非常简单:

三月 5th, 2012 | 生活小札 | No Comments »
在网易上发现一个专题:《中 国为什么做不出一口好锅?》, 经常出现一些 专题,这也是比较喜欢网易的一个原因。 文中提到:
“传统意义上的不锈钢分为300系列和400系列,主要都是加镍和铬,300系列镍多铬少,
400系列铬多镍少。2004年以后,由于镍价格飙涨达到15万元/吨-20万元/吨,而锰平均价格只有2万元/吨-3万元/吨左右,
行业内开始用锰替代镍,降低不锈钢制品的市场价格,含锰的锅被称为200系列或者锰系列”
出现锰中毒,引发很多症状:
说苏泊尔用锰代替镍,其实是应该说,苏泊尔用2XX这种低标号的不锈钢刚才制作厨具,导致锰析出量超标,这才是元凶。
而且说市价300一下的锅都受影响,我们家锅肯定不到300元。到底是2xx系列?还是3xx系列?不得而知。
先普及一下,200系列、300系列、400系列这些名次,是美国/日本标准中出现的名字,
而中国国家标准中,这些钢材有自己的中国名字,比如300系列中的304不锈钢,美国ASTM标准中,全称是:S30400,在日本的JIS标准 中是:SUS304,
而它的中国国标中名字叫:06Cr19Ni10(GB/T20878―2007新牌号)或者OCrl8Ni9(GB/T20878―2007旧牌 号),
文中说的“300系列镍多铬少,400系列铬多镍少”其实是不对的,主要的差别是3xx系列奥氏体不锈钢,4xx系列为为马氏体不锈钢,成分上来 说,甚至有的4xx系列中不含镍。
钢材中包含的重金属的含量其实不是重点,需要真正关注的是:不锈钢制品中的铬、镍等重金属的迁移量(也称析出量),因为这些析出的并被人体吸收后 的重金属离子,才是威胁健康的元凶。
话说新闻中苏泊尔的2xx系列锅具,会导致锰析出量超标,导致中毒,那么3xx、4xx系列会不会出现铬和镍中毒的问题呢?
百科全书说:4XX的不锈钢属于马 氏体,强度高,但是但塑性和可焊性较差。所以市面上用此类不锈钢做餐具的应该倍儿少。
所以市场上不锈钢队食具,可能还是以2xx系列和3xx系列为多。
以前不知道买的不锈钢制品到底是2xx?还是3xx甚至4xx不锈钢,但是在将来我们肯定会知道答案,因为根据新闻的报道,
从2011年12月份,开始不锈钢厨具上面必须标注,所使用的不锈钢种类和牌号。不过因为国标重新修订过,而且304这个称号是日本标准里面的名 字,并不是国标里面的。

以后在购买不锈钢食具时,只需要注意一点:在包装上的标号里面,有没有Mn(金属锰的代号)就行了,带Mn的肯定不是3xx系列的,因为3xx系 列只包含铬(Cr)和镍(Ni)。
但是就算我们购买了3xx系列不锈钢制品的食具,其中的铬和镍会不会威胁我们呢?
无论是3xx还是4xx里面,铬含量都是很高的。不过按照百科上面 的介绍:铬的常态是三价铬,且易于代谢,在体内不易积蓄,
不像锰和镍那样,不好代谢掉。
另外一方面,是关于镍的,经过一番google,找到一片铬镍中毒的案列: 镍 铬烤瓷牙致肾炎, 说是铬镍烤瓷牙,会导致游离态镍肾脏中堆积,导致肾炎,而且游离态的镍很难排除体外:

“做完烤瓷牙后,牙龈边缘会出现一条黑线,甚至出现牙龈红肿出血。这一现象是很多患者质疑镍铬烤瓷牙可能导致身 体不良反应的开始。“
但在2009年5月8号的,国 家食品药品监督管理局5月例行新闻发布会上,药监局说镍铬烤瓷牙安全。

二月 22nd, 2012 | 生活小札 | No Comments »
写博客最好的工具自然是word一类的桌面字处理软件,不会陷入诸如截 屏、存档上传这些繁琐的环节而
不能自拔,简单到PrintScreen、Ctrl+V了事。但是如何把这些文档发布到wordpress里去,却是个问题。
好在有postie这 个插件,只需要把文章写好,当邮件发出去即可! 写文章如同写邮件,easy!
在享受之前,得首先为postie弄一个邮箱,凡是发到这个邮箱的邮件,postie会像thunderbird那样
通过标准的pop/imap的协议,收取下来,然后自动的把它发布到wordpress里面。
第一步是设立一个支持pop或者imap的邮箱,这类邮箱,多到不胜枚举,gmail自然是首选,
第二步就是安装postie这个插件,在wordpress后台中,轻轻点击记下鼠标,就可以很easy的完成。
第三步,每隔几分钟自动访问一下: http://{your_blog_url}/wp-content/plugins/postie/get_mail.php
让自动让postie去完成他的使 命: 取邮件,然后发布。在*INX
下,一个crontab任务,在windows下呢,计划任务可能是
个办法。
使用gmail的特别注意的是:因为gmail只提供加密的pop/imap链接,所以php必须支持imap-ssl。
另外postie也有一些自己的高级语法:
1. 在subject中,包含冒号“:”来设置文章的分类,比如: Subject: Gen: New News 会把该post发布到Gen这个分类中。
2. 在subject中,中括号[]可以用来设置多个分类,比如: Subject: [1] [Mo]
My Subjec可以把该post发布到
通用分类(id为1)、Mo、Br三个分类中,
3. 在subject中,还可以用两个连字符来做这个事情: Subject: -1- -Mo- -Br- My Subject
4. 在正文中,增加一行: tags: foo,bar可以为该post打上foo和bar两个tag
5. 可以在邮件附件中带上图片,然后在正文中用#img1#,#img2#的格式,引用该图片。还可以为每个图片增加caption:
#img1 caption=’foo’#, #img2 caption=’bar’#。
二月 13th, 2012 | 生活小札 | No Comments »
增加新的alias时出现错误;
This domain name has already been used as an alias or domain.
一番探访之后,google要求需要
第一: 原来的apps 帐号必须先删掉
第二: 5天之后,才能够继续添加为alias。
http://support.google.com/a/bin/answer.py?hl=en&answer=1257646

二月 13th, 2012 | 生活小札 | No Comments »