php 获取页面中指定内容的实现类


Posted in PHP onJanuary 23, 2014

功能:

1.获取内容中的url,email,image。

2.替换内容中的url,email,image。

url:<a href="url">xxx</a>

email:admin@admin.com

image:<img src="image">

Grep.class.php

<?php 
/** grep class 
* Date: 2013-06-15 
* Author: fdipzone 
* Ver: 1.0 
* 
* Func: 
* 
* set: 设置内容 
* get: 返回指定的内容 
* replace: 返回替换后的内容 
* get_pattern 根据type返回pattern 
*/ class Grep{ // class start 
private $_pattern = array( 
'url' => '/<a.*?href="((http(s)?:\/\/).*?)".*?/si', 
'email' => '/([\w\-\.]+@[\w\-\.]+(\.\w+))/', 
'image' => '/<img.*?src=\"(http:\/\/.+\.(jpg|jpeg|gif|bmp|png))\">/i' 
); 
private $_content = ''; // 源内容 

/* ?置搜?さ?热 
* @param String $content 
*/ 
public function set($content=''){ 
$this->_content = $content; 
} 

/* 获取指定内容 
* @param String $type 
* @param int $unique 0:all 1:unique 
* @return Array 
*/ 
public function get($type='', $unique=0){ 
$type = strtolower($type); 
if($this->_content=='' || !in_array($type, array_keys($this->_pattern))){ 
return array(); 
} 
$pattern = $this->get_pattern($type); // 获取pattern 
preg_match_all($pattern, $this->_content, $matches); 
return isset($matches[1])? ( $unique==0? $matches[1] : array_unique($matches[1]) ) : array(); 
} 

/* 获取替换后的内容 
* @param String $type 
* @param String $callback 
* @return String 
*/ 
public function replace($type='', $callback=''){ 
$type = strtolower($type); 
if($this->_content=='' || !in_array($type, array_keys($this->_pattern)) || $callback==''){ 
return $this->_content; 
} 
$pattern = $this->get_pattern($type); 
return preg_replace_callback($pattern, $callback, $this->_content); 
} 

/* 根据type获取pattern 
* @param String $type 
* @return String 
*/ 
private function get_pattern($type){ 
return $this->_pattern[$type]; 
} 
} // class end 
?>

Demo
<?php 
header('content-type:text/htm;charset=utf8'); require('Grep.class.php'); 
$content = file_get_contents('http://www.test.com/'); 
$obj = new Grep(); 
$obj->set($content); 
$url = $obj->get('url', 0); 
$email = $obj->get('email', 1); 
$image = $obj->get('image', 1); 
print_r($url); 
print_r($email); 
print_r($image); 
$url_new = $obj->replace('url', 'replace_url'); 
echo $url_new; 
function replace_url($matches){ 
return isset($matches[1])? '[url]'.$matches[1].'[/url]' : ''; 
} 
?>
PHP 相关文章推荐
谈谈新手如何学习PHP
Dec 14 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
php与php MySQL 之间的关系
Jul 17 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php类的扩展和继承用法实例
Jun 20 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 #PHP
php 字符串压缩方法比较示例
Jan 23 #PHP
php 生成短网址原理及代码
Jan 23 #PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 #PHP
php弹出对话框实现重定向代码
Jan 23 #PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 #PHP
简单的php缓存类分享     php缓存机制
Jan 22 #PHP
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
JavaScript window.location对象
2014/11/14 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
javascript 注释代码的几种方法总结
2017/01/04 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
vue axios 二次封装的示例代码
2017/12/08 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
PyQt5实现简易电子词典
2019/06/25 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
Python气泡提示与标签的实现
2020/04/01 Python
社区志愿者心得体会
2014/01/03 职场文书
大学军训感言600字
2014/02/25 职场文书
公立医院改革实施方案
2014/03/14 职场文书
病人慰问信范文
2015/02/15 职场文书
小学数学教学反思范文
2016/02/16 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL