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

解决思路是:

  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. Net.Sf.Json java Object to JsonObject

    public class People{ private String name; public void setName(String name){ this.name = name; } publ ...

  2. IOS沙盒中的Documents、Library、tmp区别

    1.Documents: 用户生成的文件.其他数据及其他程序不能重新创建的文件,iTunes备份和恢复的时候会包括此目录. 2.Library/Caches: 可以重新下载或者重新生成的数据,数据库缓 ...

  3. Xcode 8.1 : Unable to read from device

    今天升级了Xcode 8.1,准备在iOS10.0.2的iPhone 6 Plus上调试,提示:Unable to read from device. 查看文件路径:"~/Library/D ...

  4. 【读书笔记】iOS网络-底层网络

    在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...

  5. UI控件闪灯

    做出点一个控件然后他和他上下左右的4个控件一起变色. #import "ViewController.h" @interface ViewController () @end @i ...

  6. Android开机广播

    有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...

  7. php中的curl

    /** * 请求接口返回内容 * @param string $url [请求的URL地址] * @param string $params [请求的参数] * @param int $ipost [ ...

  8. SVN安装使用小结

    SVN在实际的项目开发中有很广泛的用途.一开始接触SVN(Subversion),思路并不清楚,现在总算理清了. 声明:本文并不是系统地对SVN做介绍,而是笔者的使用总结,个人认为的一些要点,可能对初 ...

  9. 解决easy ui 1.4datebox控件不能清空的问题

    用easy ui遇到这个问题,在网上找到了解决方案,不过是1.3.6版本的.现提供1.4版本的修改的具体位置和代码. 我们用的是这个 修改位置:12739行,添加代码: , { text: funct ...

  10. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...