正则表达式能匹配复杂的字符串形式,比字符串处理函数功能更加多,只不过执行效率有所降低,但是可以实现非常复杂的匹配,下面总结一下
1、简单的字符串匹配,判断指定字符串是不是在另一个字符串中,和字符串查找函数差不多
1 $p = ‘/苹果/‘; 2 $str = "我喜欢吃苹果和香蕉"; 3 if (preg_match($p, $str)) { 4 echo ‘匹配成功!‘; 5 }else{ 6 echo "匹配失败!"; 7 }
可以看出preg_match()函数用来匹配正则表达式,参数依次是表达式(匹配规则),原字符串,这就是最最简单的正则表达式了
2、忽略大小写匹配
1 $p = ‘/bbc/i‘; 2 $str = "BBC是英国的一个电视台"; 3 if (preg_match($p, $str)) { 4 echo ‘匹配成功!‘; 5 }
可以看到这个也是匹配成功的,表达式后面加i代表忽略大小写进行匹配
3、常用的正则匹配字符串中的数据(电话号码,姓名,邮箱、HTML数据)
1 //匹配电话号码 2 $p = ‘/\d+\-\d+/‘; 3 $str = "我的电话是010-12345678"; 4 preg_match($p, $str, $match); 5 echo $match[0]; 6 echo "<br />"; 7 //匹配姓名 8 $p = ‘/[\w\s+]:([\w\s]+)/‘; 9 $str = "name:zengzhiying"; 10 preg_match($p, $str, $match); 11 echo $match[1]; 12 echo "<br />"; 13 //匹配邮箱地址 14 $subject = "my email is [email protected]"; 15 $pattern=‘/\[email protected]\w+\.\w+$/‘; 16 preg_match($pattern,$subject,$mathes); 17 echo $mathes[0]; 18 echo "<br />"; 19 //匹配HTML数据 20 $str = "<ul> 21 <li>item 1</li> 22 <li>item 2</li> 23 </ul>"; 24 $p=‘/<li>(.*?)<\/li>/i‘; 25 preg_match_all($p,$str,$matches); 26 print_r($matches[1]);
这里preg_match()函数的第三个参数是匹配获得的结果,是一个数组,如果不知道$match哪一个元素是要找的,可以先print_r试一下,然后再确定最终结果
4、获取抓取网页中的特定数据
有时候我们需要抓取其他网站的某个具体数据,首先我们抓取到的是整个页面的HTML内容,然后把它们放到字符串中,接下来我们想获取其中某个元素中的值,这个时候就需要正则表达式进行匹配了,下面看一个案例,我们登录网站时一般除了提交用户名、密码、验证码等数据外一般还有隐藏域,value里面有一段很长的字符串,随着不同的客户端会发生变化,这是为了防止一些非法操作的,如果仅仅是这样我们可以抓取到这个数据,从而在服务器端进行模拟登录,一样抓取到用户登录后的内容,php中可以用curl发送请求来实现,现在只是抓取value属性的值,代码如下:
1 $data="<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"shssksswHJFJNVjsuehdj28u3uej-9wj\" />"; 2 $pattern = ‘/<input type="hidden" name="__VIEWSTATE" value="(.*?)" \/>/is‘; 3 preg_match_all($pattern, $data, $matches); 4 echo $matches[1][0];
这样我们就输出了特定数据,就是 shssksswHJFJNVjsuehdj28u3uej-9wj
5、验证数据不能为空
有时候用户输入信息我们通过get或者post方式获取,首先要确定某个变量不能是空值,这个用php内置函数empty就可以了,下面是一个简单的函数
1 function Noempty($user){ 2 if(empty($user)){ 3 $ret=0; 4 }else{ 5 $ret=1; 6 } 7 return $ret; 8 }
返回值我们可以用其他值,总之方便我们使用就可以了,可以作为判断也可以输出信息
6、验证邮箱格式
1 function EmailVer($email){ 2 $pattern=‘/^[\w\.][email protected]\w+\.\w+$/i‘; 3 if(!preg_match($pattern, $email)) { 4 $ret=0; 5 }else { 6 $ret=1; 7 } 8 return $ret; 9 }
7、验证手机号码
1 function MobileVer($mobile) { 2 $pattern=‘/^1\d{10}$/i‘; 3 if(!preg_match($pattern, $mobile) { 4 $ret=0; 5 }else { 6 $ret=1; 7 } 8 return $ret; 9 }
后续再继续补充