php正则函数抓取网页连接(正则表达式能匹配复杂的字符串形式,执行效率有所降低)
优采云 发布时间: 2022-04-07 03:24php正则函数抓取网页连接(正则表达式能匹配复杂的字符串形式,执行效率有所降低)
正则表达式可以匹配复杂的字符串形式,功能比字符串处理函数多,但执行效率降低,但可以实现非常复杂的匹配。下面总结一下
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 yingzhi_zeng@126.com";
15 $pattern=‘/\w+@\w+\.\w+$/‘;
16 preg_match($pattern,$subject,$mathes);
17 echo $mathes[0];
18 echo "<br />";
19 //匹配HTML数据
20 $str = "
21 item 1
22 item 2
23 ";
24 $p=‘/(.*?)/i‘;
25 preg_match_all($p,$str,$matches);
26 print_r($matches[1]);
这里preg_match()函数的第三个参数是匹配得到的结果,是一个数组。如果不知道要找$match的哪个元素,可以先试试print_r,再判断最终结果
4、从抓取的网页中获取具体数据
有时我们需要抓取其他网站的特定数据,首先我们抓取整个页面的html内容,然后把它们放到一个字符串中,然后我们要抓取其中一个元素,这时候一个正则匹配需要表达式。我们来看一个案例。我们在登录网站时,一般除了提交用户名、密码、验证码等数据外,还有一个隐藏字段。值中有一个段落。很长的字符串会随着不同的客户端而变化。这是为了防止一些非法操作。如果这是我们捕获此数据的唯一方法,我们可以在服务器端模拟登录并捕获用户。登录后的内容可以通过在php中用curl发送请求来实现。现在它只获取 value 属性的值。代码如下:
1 $data="";
2 $pattern = ‘//is‘;
3 preg_match_all($pattern, $data, $matches);
4 echo $matches[1][0];
这样我们就输出了具体的数据,也就是shssksswHJFJNVjsuehdj28u3uej-9wj
5、验证数据不能为空
有时用户输入的信息是通过get或post获取的。首先,我们必须确保变量不能为空值。这可以通过使用空的 php 内置函数来完成。下面是一个简单的函数
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\.]+@\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 }
稍后继续添加
php中正则表达式的匹配和数据校验总结
原版的: