正则匹配div中的a标记的href 和content(一)

2015-01-22 21:03:03 · 作者: · 浏览: 8

?

 
 

?

很久后又一次接触正则,那种似曾相似的感觉,你是不是也有这样的感觉,这么小CASE的东西,我一定要把他彻底掌握了,于是花时间看手册,于是就明白了,于是下次又是似曾相似……

?

总写下今天用到的地方:

//demo

?

$str = '
tryagin
'; // 先匹配出DIV preg_match_all('/
(.*?)
/i', $str, $matches); if(!empty($matches)) { $target_content = $matches[0][0]; } //第二次匹配出其中的a标记,注意()是返回匹配的内容 preg_match_all('/ (.*?)/i', $target_content, $matches_detail); if(!empty($matches_detail)) { $href_content = $matches_detail[1]; $detail_content = $matches_detail[2]; }
方法:

?

?

/**
    * function: 获取主题馆数据
    * 
    * @param string  $topic    主题名
    * @param string  $pattern  正则模式
    *
    * @return array  $data  $data['href_content']:链接信息数组;$data['detail_content']:名称信息数组
    */
    private function get_topic_data($topic, $pattern1, $pattern2)
   	{
   		$data = array();

   		if( empty($topic) || empty($pattern1) || empty($pattern2))
   		{
   			return $data;
   		}
   		// 构建主题馆数据
    	// 获取整体数据
    	// 获取页面ID
        $modpage_id = 0;
        $modpages = $this->Modpage_Model->getAllPages();
        foreach($modpages as $one_page) {
            if ($one_page['department'] == $topic) {
                $modpage_id = $one_page['id'];
            }
        }

        // 取信息
        $version_data = $this->Modpage_Model->getCurrentPageVersion($modpage_id);

        $page_info_raw = $this->Modpage_Model->getVersionData($modpage_id, $version_data['version']);

        // 生成数据
        foreach ($page_info_raw as $k => $v)
        {
        	//儿童单独处理
        	if($topic == 'children')
        	{
        		if($v['module_id'] == 1 && $v['desc'] == '快速找宝贝')
        		{	
        			$parse_str = $v['content'];
        			break;
        		}
        	}
        	else
        	{
        		// 去后台副导航数据
        		if($v['module_id'] == 4)
	        	{
	        		$parse_str = $v['content'];
	        		break;
	        	}
        	}
        }

    	// 匹配主题馆需要的数据
        // 清洗数据
		$parse_str = $this -> clearData($parse_str);
    	preg_match_all($pattern1, $parse_str, $matches);

        if(!empty($matches))
        {
            $target_content = $matches[0][0];
        }

        // 替换主机名
		$target_content = str_replace($this -> website, TOUCH_URL, $target_content);

		// 清洗数据
        $target_content = $this -> clearData($target_content);

        preg_match_all($pattern2, $target_content, $matches_detail);

        if(!empty($matches_detail))
        {
            $data['href_content'] = $matches_detail[1];
            $data['detail_content'] = $matches_detail[2];
        }
        return $data;
   	}

   	/**
    * function: 清洗数据(过滤字符串中的换行符、制表符)
    * 
    * @param string  $str    初始字符串
    *
    * @return string  $str
    */
   	private function clearData( $str )
   	{
   		if( empty($str) )
   		{
   			return '';
   		}
   		// 清除换行符
   		$str = str_replace(
, '', $str);
   		// 清除换行符 
		$str = str_replace(
, '', $str);
		// 清除制表符
		$str = str_replace(	, '', $str); 
		$str = trim( $str );
		return $str;
   	}

//测试方法

?

?

/**
    * 首页入口
    * 
    */
    public function index() {

    	$data = array();
    	$result = array();
    	
    	// 获取主题馆信息

    	// 主题馆原始数据  array('部门'=>array('类型','正则一','正则二'))
        $topic_name_arr = array(
        	'sports' => array('sport','/
(.*?)
/i','/ (.*?)/i'), 'womenshoes' => array('women','/
(.*?)
/i','/ (.*?)/i'), 'menshoes' => array('man','/
(.*?)
/i','/ (.*?)/i'), 'outdoor' => array('outdoor','/
(.*?)
/i','/ (.*?)/i'), 'children' => array('children','/(.*?)/i','/ (.*?)/i'), ); // 组织数据 foreach ($topic_name_arr as $type => $pattern) { $result = $this -> get_topic_data( $type, $pattern[1], $pattern[2] ); $data['data'][$pattern[0]] = $result; } $h_data['jspath'] = 'index'; $this->load->view(touch/common/header,$h_data); $this->load->view(touch/index/index,$data); $this->load->view(touch/common/footer); }

?

?

应用场景:

?