手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆

关于PHP正则的取反和逻辑思想的问题

首页 > PHP >

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

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

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

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




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

1条记录访客评论

haobano  学习

Post by 亦可 on 2010, May 19, 1:09 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):