解析php利用正则表达式解决采集内容排版的问题

做采集经常遇到的问题是内容排版问题,用了一些时间写了个用正则替换html标签和样式的函数,共享下。


代码如下:

/**
 * 格式化内容
 * @param string $content 内容最好统一用utf-8编码
 * @return string
 * !本函数需要开启tidy扩展
 */
function removeFormat($content) {
 $replaces = array (
   "/<font.*?>/i" => '',
   "/<\/font>/i" => '',
   "/<strong>/i" => '',
   "/<\/strong>/i" => '',
   "/<span.*?>/i" => '',
   "/<\/span>/i" => '',
   "/<div.*?>/i" => "<p>",
   "/<\/div>/i" => "</p>",
   "/<!--<.*?>*-->/i"=>'',
   /* "/<table.*?>/i" => '',//遇到有表格的内容就不要启用
   "/<\/table>/i" => '',
   "/<tbody.*?>/i" => '',
   "/<\/tbody>/i" => '',
   "/<tr.*?>/i" => '<p>',
   "/<\/tr>/i" => '</p>',
   "/<td.*?>/i" => '', */
   "/style=.+?['|\"]/i" => '',
   "/class=.+?['|\"]/i" => '',
   "/id=.+?['|\"]/i"=>'',
   "/lang=.+?['|\"]/i"=>'',
   //"/width=.+?['|\"]/i"=>'',//不好控制注释掉
   //"/height=.+?['|\"]/i"=>'',
   "/border=.+?['|\"]/i"=>'',
   "/face=.+?['|\"]/i"=>'',
   "/<br.*?>[ ]*/i" => "</p><p>",
   "/<iframe.*?>.*<\/iframe>/i" => '',
   "/ /i" => ' ',//空格替换掉
   "/<p.*?>[ |\x{3000}|\r\n]*/ui" => '<p>    ',//替换半角、全角空格,换行符,用 排除写入数据库时产生的编码问题

);
 $config = array(
         //'indent' => TRUE, //是否缩进 
                'output-html' => TRUE,//是否是输出xhtml 
                'show-body-only'=>TRUE,//是否只获得到body 
               'wrap' => 0
    );
 $content = tidy_repair_string($content, $config, 'utf8');//先利用php自带的tidy类库修复html标签,不然替换的时候容易出现各种诡异的情况
 $content = trim($content);
 foreach ( $replaces as $k => $v ) {
  $content = preg_replace ( $k, $v, $content );
 }

if(strpos($content,'<p>')>6)//部分内容开头可能缺失<p>标签
  $content = '<p>    '.$content;

$content = tidy_repair_string($content, $config, 'utf8');//再修复一次,可以去除html空标签
 $content = trim($content);
 return $content;
}

(0)

相关推荐

  • PHP 中英文混合排版中处理字符串常用的函数

    # 判断某个位置是中文字符的左还是右半部分,或不是中文  # 返回值 -1 左 0 不是中文字符 1 右  # 用法  /*  $a = 'this is 中文';  print is_chinese($a, 1); // 0  print is_chinese($a,8); // -1  print is_chinese($a,9); // 1  */  function is_chinese(&$str, $location) {  $ch = true;  $i = $location; 

  • PHP中文竖排转换实现方法

    PHP中文竖排转换程序,文本框输入文字,转换后会竖排文字. 效果图 index.php内容 <?php include('ccw.inc.php'); if (isset($_POST['string'])){ $ccw = new CCW; $converd = $ccw->convert($_POST['string']); } ?> <meta http-equiv="Content-Type" content="text/html; chars

  • 解析php利用正则表达式解决采集内容排版的问题

    做采集经常遇到的问题是内容排版问题,用了一些时间写了个用正则替换html标签和样式的函数,共享下. 复制代码 代码如下: /** * 格式化内容 * @param string $content 内容最好统一用utf-8编码 * @return string * !本函数需要开启tidy扩展 */function removeFormat($content) { $replaces = array (   "/<font.*?>/i" => '',   "/

  • js利用正则表达式检验输入内容是否为网址

    js正则检验输入的是否为网址功能在网页中也是很常见的,友情链接部分.表单填写个人主页的时候,使用JavaScript取验证是否为网址. 这个检验不好写,最好还是使用正则表达式去认证. 规定,输入的东西只能是http://与https://开头,而且必须是网址. 有人说,为何像www.1.com这样的网页不行呢? 这是以免你拿用户输入的东西构造超级链接的时候,a标签中的href属性如果遇不到http://或者https://的东西,那么就会认为是根目录,会在你的网站的网址后面接着写入这个地址再跳转

  • java中 利用正则表达式提取( )内内容

    昨天遇到一个小问题,需要批量处理一些用户,而前台传来的用户格式如下,要提取括号中间的内容(不带括号) 教师10(0010)教师11(0011)教师9(009)教师12(0012)教师13(0013)教师14(0014) 本来想用java的String.split()和substring()来搞定,但是需要处理多次比较麻烦,就用正则表达式了.虽然语法忘得差不多了,但是印象中用断言比较方便(关键希望结果不带括号).打开RegexBuddy试了下,轻松搞定:下边是java实现代码: 复制代码 代码如下

  • 利用正则表达式进行中文排版的实例教程

    目录 前言 〇.常见匹配类 一.段落排版类 1.非段落换行排版(要求段落之间空一行) 2.插入空行 3.删除空行 4.行首批量添加(替换项为2个空格时可实现首行缩进) 5.行尾批量添加 6.半角引号替换为全角引号 7.半角单引号替换全角 8.固定宽度加硬回车(下例为宽度50) 二.删除特定字符串类 1.删除行前空格 2.删除行尾空格 3.删除包含指定关键字的行 4.删除以指定关键字开头的行 5.删除HTML注释 6.删除HTML标签 7.删除HTML标签内的全部 三.中文汉字处理类 1.中文和英

  • Python利用正则表达式实现计算器算法思路解析

    (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运算,若存在进行第3步,若不存在则直接进入第4步 3.利用正则表达式获取最底层括号内的四则运算表达式 4.将四则运算表达式进行预处理:表达式开头有负数时,在表达式前加上一个0 5.利用re.split().re.findall()方法,通过加减符号,对四则运算进行拆分为乘除运算式和数字,并保留对应的位置下标. 6.利用re.split().re.fi

  • Js利用正则表达式去除字符串的中括号

    let str = '这是一个字符串[html]语句;[html]字符串很常见'; alert(str.replace(/\[|]/g,''));//移除字符串中的所有[]括号(不包括其内容) //输出:这是一个字符串html语句;html字符串很常见 alert(str.replace(/\[.*?\]/g,''));//移除字符串中的所有[]括号(包括其内容) //输出:这是一个字符串语句;字符串很常见 移除所有中括号,不包括其内容 let str = "[1,2,3,4,5,6,7,8]&

  • Python爬虫教程之利用正则表达式匹配网页内容

    前言 Python爬虫,除了使用大家广为使用的scrapy架构外,还有很多包能够实现一些简单的爬虫,如BeautifulSoup.Urllib.requests,在使用这些包时,有的网络因为比较复杂,比较难以找到自己想要的代码,在这个时候,如果能够使用正则表达式,将能很方便地爬取到自己想要的数据. 何为正则表达式 正则表达式是一种描述字符串排列的一种语法规则,通过该规则可以在一个大字符串中匹配出满足规则的子字符串.简单来说,就是给定了一个字符串,在字符串中找到想要的字符串,如一个电话号码,一个I

  • Python如何利用正则表达式爬取网页信息及图片

    一.正则表达式是什么? 概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 个人理解: 简单来说就是使用正则表达式来写一个过滤器来过滤了掉杂乱的无用的信息(eg:网页源代码-)从中来获取自己想要的内容 二.实战项目 1.爬取内容 获取上海所有三甲医院的名称并保

  • 利用正则表达式匹配浮点型数据

    目录 前言: 正则表达式 Java代码 附:正则表达式(同时匹配整型数和浮点数) 总结 前言: 在开发中我们常常会使用到正则表达式,但很奇怪的是,每次你在使用正则表达式的时候你都发现你不会写,不知道语法,可能你大概还记得一部分,但很模糊,对于正则表达式的语法真心记不住,别的程序猿是不是我不清楚,但我是就是这样子,每次写都会发现记不住了,然后又去网上查找资料,又进行一次学习,慢慢的发现基本语法你又会了,但实际上你还是不会,可能是没有完全明白或者在实际开发中没有长期的使用导致,今天写这篇文章纯属唠嗑

  • Java利用Optional解决空指针异常

    目录 背景介绍 案例 基本用法解析 转换与过滤 案例优化 源码解析 总结 背景介绍 Java 8 引入了一个十分实用的 Optional 类,它主要是为了解决空指针异常(NullPointerException).当我们对对象的属性进行检查,判断它的值是否为期望的格式,最终却发现我们查看的并不是一个对象,而是一个空指针,它会立即抛出一个让人厌烦的 NullPointerException 异常. 本质上,Optional 类是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象

随机推荐