Preg正则表达式高级语法

不得不承认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 开头,

如何关掉tooltips

输入命令的时候,出来个tooltips干扰你的视线,比如下面那个黄色的”Total Commadner”提示框,是不是很不爽?

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

不锈钢和日常生活


在网易上发现一个专题:《中 国为什么做不出一口好锅?》, 经常出现一些 专题,这也是比较喜欢网易的一个原因。

文中提到:
“传统意义上的不锈钢分为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月例行新闻发布会上,药监局说镍铬烤瓷牙安全。

postie plugin of wordpress

写博客最好的工具自然是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’#。


This domain name has already been used as an alias or domain. error, why?

增加新的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