php匹配指定标签的内容

php匹配指定div内容,在用php编写采集程序的时候,抓取到的网页数据有时候我们只需要一小段标签内容,怎么才能冲html代码中提取出来呢,这里提供一个函数示例,实现php匹配任意html标签内的所有内容:

/**
* 匹配任意id的html标签内容
* 
*/
function getWebTag($tag_id,$tag=‘div‘,$data=false){     
        $charset_pos = stripos($data,‘charset‘);
        if($charset_pos) {
            if(stripos($data,‘utf-8‘,$charset_pos)) {
                $data = iconv(‘utf-8‘,‘utf-8‘,$data);
            }else if(stripos($data,‘gb2312‘,$charset_pos)) {
                $data = iconv(‘gb2312‘,‘utf-8‘,$data);
            }else if(stripos($data,‘gbk‘,$charset_pos)) {
                $data = iconv(‘gbk‘,‘utf-8‘,$data);
            }
        }
       
        preg_match_all(‘/<‘.$tag.‘/i‘,$data,$pre_matches,PREG_OFFSET_CAPTURE);    //获取所有div前缀
        preg_match_all(‘/<\/‘.$tag.‘/i‘,$data,$suf_matches,PREG_OFFSET_CAPTURE); //获取所有div后缀
        $hit = strpos($data,$tag_id);
        if($hit == -1) return false;    //未命中
        $divs = array();    //合并所有div
        foreach($pre_matches[0] as $index=>$pre_div){
            $divs[(int)$pre_div[1]] = ‘p‘;
            $divs[(int)$suf_matches[0][$index][1]] = ‘s‘;   
        }
       
        //对div进行排序
        $sort = array_keys($divs);
        asort($sort);
       
        $count = count($pre_matches[0]);
        foreach($pre_matches[0] as $index=>$pre_div){
            //<div $hit <div+1    时div被命中
            if(($pre_matches[0][$index][1] < $hit) && ($hit < $pre_matches[0][$index+1][1])){
                $deeper = 0;
                //弹出被命中div前的div
                while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue;
                //对剩余div进行匹配,若下一个为前缀,则向下一层,$deeper加1,
                //否则后退一层,$deeper减1,$deeper为0则命中匹配,计算div长度
                foreach($sort as $key){
                    if($divs[$key] == ‘p‘) $deeper++;
                    else if($deeper == 0) {
                        $length = $key-$pre_matches[0][$index][1];
                        break;
                    }else {
                        $deeper--;
                    }
                }
                $hitDivString = substr($data,$pre_matches[0][$index][1],$length).‘</‘.$tag.‘>‘;
                break;
            }
        }
        return $hitDivString;
}

调用示例

$html=file_get_contents(‘http://www.baidu.com‘);

$divContent=getWebTag(‘id="content"‘,‘div‘,$html);

时间: 2024-08-28 06:41:02

php匹配指定标签的内容的相关文章

用xpath提取xml文档指定标签的内容

1 <?xml version="1.0" encoding="UTF-8"?> 2 <书架> 3 <书> 4 <书名 name="vvvb">何茂赟自传</书名> 5 <作者>何茂赟</作者> 6 <售价>500.00</售价> 7 <售价>1234元</售价><售价>1234元</售价>&

用正则表达式替换指定标签中的内容

用正则表达式替换指定标签中的内容,也是在工作中遇到的就顺手记了下来 string sXML = "ABCDEFCSF<p>123123</p>KOPL";//现在我要去掉P标签中的内容,实现 ABCDEFCSFKOPL这样的效果. 引入:using System.Text.RegularExpressions; Regex rg = new Regex("<pict>.*</pict>"); sXML = rg.Rep

python--正则匹配首尾标签中间的内容

import re it = re.finditer(r"<url>.*?</url>", '被筛选字符串') # 匹配url标签里的内容 # it = re.finditer(r"<command>.*?</command>", con) # 匹配标签里的内容,有换行符\n导致匹配失败 it2 = re.finditer(r"<command>[\s\S]*?</command>&q

jQuery如何为指定标签添加和删除一个样式

jQuery如何为指定标签添加和删除一个样式:在网页的实际应用中,需要根据不同的条件来改变元素的CSS样式,通过动态的给元素添加删除一个CSS类可以实现此功能,下面通过实例来介绍一下如何实现此种功能.一.使用addClass()和removeClass()添加和删除一个CSS类:代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="

css基础 给一个标记的后代中 指定的标签 或者指定标签的指定class名称 添加样式 (后代多级的)

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ex1: code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&

【转载】Python使用中文正则表达式匹配指定中文字符串的方法示例

本文实例讲述了Python使用中文正则表达式匹配指定中文字符串的方法.分享给大家供大家参考,具体如下: 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程序和代码的处理,使过程简洁和事半功倍,这往往是高手和菜鸟最显著的差别.

jsp自定义标签获取标签体内容输出到页面展示《三》

1.BodyTag.java package com.zy.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tage

正则表达式匹配a标签或div标签

这里以a标签为例 a标签的href var a='<P><A href=\'~abc/ccg/ab.jpg\' width="3">文字</A><A width="4" style="color:#ddd; font-weight:bold;" mm_href="http:www.baidu.com" href="http://bbs.cn.yimg.com/user_img

Python(2.7.6) glob - 匹配指定模式的文件

Python 标准库的 glob 模块支持查询匹配指定模式的文件或目录.这里的模式使用的并不是正则表达式,而是通过通配符来匹配的 Unix 风格的路径名扩展. 支持的通配符: 通配符 说明 *  匹配任意个字符 ?  匹配一个字符 []  匹配括号间的任一字符,可以使用 - 表示范围  \  转义字符,如用 \? 匹配 ? 假设现在有一个名为 dir 的目录,该目录及其子目录的结构如下: ├── dir │   ├── db.conf │   ├── dir1 │   │   ├── hello