?
?
很久后又一次接触正则,那种似曾相似的感觉,你是不是也有这样的感觉,这么小CASE的东西,我一定要把他彻底掌握了,于是花时间看手册,于是就明白了,于是下次又是似曾相似……
?
总写下今天用到的地方:
//demo
?
$str = ''; // 先匹配出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); }
?
?
应用场景:?