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

解决思路是:

  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. Android常用抓包工具之TcpDump

    ➠更多技术干货请戳:听云博客 做为一个测试人员,工作中经常会用到数据抓包工具来进行数据分析和验证,下面就简单介绍一下工作中常用的抓包工具. TcpDump抓包 Tcpdump是一个用于截取网络分组,并 ...

  2. 关于插件管理器Alcatraz

    如何安装插件管理器Alcatraz:去github下载一个Alcatraz安装包,然后运行一下. 会弹出 记得选择左边的Load Bundle 退出Xcode 重新运行一下就OK 了. 然后就可以看到 ...

  3. C语言中的复合类型

    复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...

  4. html常用的综合体

    clip:rect(20px 100px 50px 20px); clip属性中的rect,clip:rect(y1 x2 y2 x1)参数说明如下: y1=定位的y坐标(垂直方向)的起点 x1=定位 ...

  5. MonoDevelop几个常用的快捷键

    MonoDevelop几个常用的快捷键 CTRL+K  删除光标所在行的该行后面的代码 CTRL + ALT +C  注释/不注释该行 CTRL+ DOWN  像鼠标滚轮一样向下拖 CTRL + UP ...

  6. 史上最详细“截图”搭建Hexo博客并部署到Github

    http://jingyan.baidu.com/article/d8072ac47aca0fec95cefd2d.html 大家也搭建过博客,很多时候,按着教程来做就可以了,但是我当时为了搭建Hex ...

  7. node.js学习之路

    (非原创) 目录 Nodejs的介绍 15个Nodejs应用场景 Nodejs学习路线图 1. Nodejs的介绍 Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速 ...

  8. jsoup解析HTML及简单实例

    jsoup 中文参考文献    http://www.open-open.com/jsoup/ 本文将利用jsoup,简单实现网络抓取的功能,并给出一个小实例,该实例效果为:获取作者本人在博客园写的所 ...

  9. /etc/fstab 参数详解及如何设置开机自动挂载

    某些时候当Linux系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,否则,Linux是无法使用新建的分区的. /etc/fstab 文件负责配置Linux开机时自动挂载的分区. Window ...

  10. 【JAVA 小结】Java关于类与对象的代码

    分别建立2个类class works 和 Person import java.io.*; public class works { public static void main(String[] ...