大家都知道,正则表达式在处理字串方面,大大的方便了许许多多的PHP程式设计师.
但对于想学正则表达式的初学者而言,多多少少有一些问题,我想以下的解释或多或少都会有所帮助吧:)
通常上,正则表达式会用到以下的几个"符号":
^-代表字串前面一定要有这样的字,如^ http://,代表前面一定要有 http:// $-代表字串后面一定要有这样的字. ?(一个问号)-它代表一个或没有字元 *(一个*)-它代表没有或者更多前面的字元 .(一个句点)-它代表任何一个字元 +(一个加)-它代表至少一个或更多前面的字元 [xyz]-它代表任何一个字元,或x,或y,或z [a-z]-它代表任何一个字元,由a至z [[:alnum:]]-代表由a至z,0至9 [[:digit:]]-代表由0至9 当使用正则表达式时,必需注意ereg及eregi可大大不同喔~ ereg是非常敏感的(意即大小字母都分得非常清楚),而eregi则不是(只要记着i代表case-insensitive就可以了) 这里举一些例子: $regexp=eregi("a?c","abc");//--这是对的,因?可以代表"一个"或没有字元 $regexp=eregi("a?c","ac");//--这也是对的,因?可以代表一个或"没有"字元 $regexp=eregi("a?c","a");//--这样就不对了,纵使有a,可是还是要有c $regexp=eregi("[abc]","a");//--这是对的,因a是大括号里的其中一个字元 $regexp=eregi("[a-z]","c");//--这是对的,因c包括在a至z里 $regexp=eregi("[a-z]","0");//--这是不对的,因0并不包括在a至z里面 $regexp=eregi("a.c",因一个.代表"任何"一个字 $regexp=eregi("a.c","ac");//--这可就不对了,因.代表"一个"字元,所以放abbc也是不对的 $regexp=eregi("a+c","aaaac");//--这是对的,因+代表一人或"更多"前面的字元 $regexp=eregi("a+c","abbc");//--这样是不对的,+代表一个或更多"前面的字元",而不是代表任何一个字元 $regexp=eregi("a+c","abc");//--这样也是不对的,注释如上 $regexp=eregi("[^abc]","a");//--这是比较不同的一点,那就是如果^出现在[]里面,代表"除"了里面的字,全部都是对的. $regexp=eregi("[^abc]","d");//--这是对的,因d并不在abc里面 $regexp=eregi("[^[:alnum:]]","9");//--这是对的,因~并不包括在a至z,0至9里面 当然,[[:digit:]]用法也是相同: $regexp=eregi("[^[:digit:]]",因a并不包括在0至9里面 最后,举个有用的例子,比如说,我要每个人的密码都不准拥有0至9,可以这样试验: $regexp=eregi("^[^0-9]+$","aaa9");//--把aaa9当做密码 if($regexp==""){ echo"密码拥有号码,请改过"; }else{ echo"密码没有号码,通过"; } 测验显示,密码拥有号码,请改过. 相信每个人都看到,[^0-9]前后各有^及$,这是为了确保前后不能拥有号码,而+则确保中间没有任何的号码,[]里面的^,则是"除了0至9之外,其他一律通过" 所以只要将9拿去,就会显示"密码没有号码,通过"了!