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