简单人生
幻想指点江山,梦中激扬文字

众所周知,^这个符合在正则里非常有用,首先它代表了行首匹配,比如/^abc/,就代表了必须是abc开头,同样,它也是一个取反的标记。

何为取反?就说刚才吧^abc是以abc开头,那么取反的意思就是不以abc三个字母的开头。

正常情况下,这些都可以运用,不会有什么错误。

再举个例子:我要判断字符串是否有特殊字符,怎么办?
正常情况下,我会这样preg_match("/[_-~!@#$%^]+/",$string) ,当然特殊字符不止这么一些,只是举个简单的例子。
如果我的$string = 'abcdefg--hijklmn',那么,我这样的匹配肯定是返回1的,因为有“-”被我匹配了。
现在反过来讲,如果我不想匹配这些特殊字符怎么办?
首先想到的就是取反,于是我preg_match("/[^-~!@#$%^]/",$string),再匹配一下,结果还是返回1。
为啥呢?
起初想半天就没想明白,为什么我明明取反了却匹配仍然成功呢?
仔细思索了好久才明白,我取反之后,其实我的match的内容就变成了:与不是特殊字符匹配,那么我的string里面几乎全都不是特殊字符,当然就匹配成功了。
所以,对于这种情况,还是先判断是否有特殊字符,然后再根据返回值再判断是否没有特殊字符吧。(有点象绕口令了)。

posted on 2007-10-09 17:01 简单人生 阅读(1887) 评论(2)  编辑 收藏 引用 所属分类: Loving PHP
Comments
  • # re: 关于PHP正则的取反和逻辑思想的问题[未登录]
    简单人生
    Posted @ 2007-10-16 16:27
    由于你的网址的名字与我的QQ的空间的一样,过来踩踩,想过简单人生的人是否都是过上简简单单的幸福!  回复  更多评论   
  • # re: 关于PHP正则的取反和逻辑思想的问题
    简单人生
    Posted @ 2007-10-16 17:41
    是呀。都是简单的人生。过段时间自己建BLOG。呵呵……毕竟用别人的东西总感觉不爽。  回复  更多评论   
只有注册用户登录后才能发表评论。