用正则表达式去解决结巴这个问题可以通过下面进行解决:

解决思路是:

  1. 先找到重复的不部分
  2. 用str_replace($source,$replace,$str);来进行代理

下面分两种情况,最后将这两种情况进行合一处理

1,针对aaabbbccc...ddd...ffafawefafdaddd这样的字符串,去重可以使用下面的方法

 $str1="aaabbbccc...ddd...ffafawefafdaddd";
 $reg1 = '/(.)\1+/'; //这里\1表示括号内的第一个表达式的值
 $str2 = str_replace('.','',$str1);
 preg_match_all($reg1,$str2,$rst);
 $str3=str_replace($rst[0],$rst[1],$str2);

英文字母去重

2,针对含有汉语字符的,比如说"我我...是是....一个个个个个个...帅哥哥哥哥哥",去重可以采用下面方法

 $str11 = "我我...是是....一个个个个个个...帅哥哥哥哥哥";
 $str12 = str_replace('.','',$str11);
 $reg11 = '/([\x{4e00}-\x{9fa5}])\1+/u'; //u表示utf编码
 preg_match_all($reg11,$str12,$rst);
 $rst12 = str_replace($rst[0],$rst[1],$str12);
 echo $rst12;

汉语去重

最后,将两种情况进行合并,并封装成一个方法:

 /*
 说明,去除$str中重复的字符
 */
 function getRealString($str){
     $str1 = str_replace('.','',$str);
     //注意,这里的\1表示第一个表达式的值,是第一个大括号的值,所以可以是英文或者汉语
     //注意汉语的编码范围是0x4e00-0x9fa5; 后面u表示按照utf编码
     //?:表示非获取型匹配,也就是说返回的$rst里不会出现此表达式的值
     $reg1 = '/([\x{4e00}-\x{9fa5}]|(?:.))\1+/u';
     preg_match_all($reg1,$str1,$rst);
     return str_replace($rst[0],$rst[1],$str1);
 }

去除$str中重复的字符

总结一下,上面的程序主要是考察了对正则表达式的理解以及数组的函数的使用

php正则表达式治疗结巴的更多相关文章

  1. Java——正则表达式(字符串操作)

     public class Test1 { /* * 正则表达式:对字符串的常见操作: * 1.匹配: *  其实是用的就是string类中的matches(匹配)方法. * 2.切割 *  其实 ...

  2. Python 结巴分词(1)分词

    利用结巴分词来进行词频的统计,并输出到文件中. 结巴分词github地址:结巴分词 结巴分词的特点: 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成 ...

  3. Python 结巴分词模块

    原文链接:http://www.gowhich.com/blog/147?utm_source=tuicool&utm_medium=referral PS:结巴分词支持Python3 源码下 ...

  4. 关于JDK中正则表达式

    正则表达式的构造摘要 构造 匹配     字符 x 字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn ...

  5. java学习——正则表达式

    本文内容来源于  历经5年锤练--史上最适合初学者入门的Java基础视频 例:要求QQ号长度为5~15位,不能以0开头 String qq="123456"; String reg ...

  6. 结巴(jieba)中文分词及其应用实践

    中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...

  7. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  8. (转)LUA正则表达式不完全指南

    转自剑侠论坛,并稍微修改个别文字. 好不容易闲下来,研究了一下正则表达式,然后越钻越深,经过跟大神们讨论学习后,就没有然后了.总之╮(╯▽╰)╭很有用的一个东西,至少对于用户输入的读取方面会比较方便, ...

  9. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

随机推荐

  1. 小结RunLoop

    Core Foundation中关于RunLoop的5个类 CFRunLoopRef CFRunLoopModeRef CFRunLoopSourceRef CFRunLoopTimerRef CFR ...

  2. SQL server 2014安装以及解决连接数据库失败问题

    安装教程:http://jingyan.baidu.com/article/3a2f7c2e653d5926afd61197.html 安装好之后打开SQL server 2014 Managemen ...

  3. Hbase安装配置(靠谱亲测)

    Hbase是Hadoop生态系统中的NoSql列式数据库.通过Hbase,可以进行数据读写,比较适合Top n场景.Hbase搭建的系统,瓶颈在于硬盘的传输速度.RDBMS一般的瓶颈在于寻道速度. 实 ...

  4. 解决由OpenShift自带的APC加速器造成的代码无法及时生效的问题

    如果你在使用你的Openshift时出现了这样的问题,那就说明APC加速器导致了此故障 1.上传后的代码运行效果没有变化 2.Wordpress翻来覆去自己重复升级一个版本(←Wordpress在自嗨 ...

  5. 十五天精通WCF——第十二天 说说wcf中的那几种序列化

    我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇 我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf ...

  6. Thrift 跨服务开发框架

    Thrift概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP,Ruby, Erla ...

  7. Netty 异步的、事件驱动的网络应用程序框架和工具

    Netty是由JBOSS提供的一个Java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 项目地址:https://githu ...

  8. coursera机器学习-聚类,降维,主成分分析

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  9. C# 读取在存储过程多结果集

    --SQL Server 测试环境搭建: Create database Test; go USE [Test] GO if OBJECT_ID('Tab','U') is not null drop ...

  10. 字典dictionary

    字典,即我们可以通过索引来查找更详细的内容.每个item都是由一对index:value构成的 索引可以有副本,但是试图根据存在副本的索引访问元素时,只会取最靠后的那个. 索引必须是immutable ...