很久後又一次接觸正則,那種似曾相似的感覺,你是不是也有這樣的感覺,這麼小CASE的東西,我一定要把他徹底掌握了,於是花時間看手冊,於是就明白了,於是下次又是似曾相似……
總寫下今天用到的地方:
//demo
$str = '
/** * 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); }
應用場景:
休閒鞋
正裝鞋
商務鞋
涼鞋
戶外鞋
帆布鞋
板鞋
男靴
棉鞋
1月新品
工裝鞋
牛津鞋
男靴
伐木鞋
帆船鞋
商務皮鞋
增高鞋
軍警靴