php正则表达式治疗结巴
用正则表达式去解决结巴这个问题可以通过下面进行解决:
解决思路是:
- 先找到重复的不部分
- 用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正则表达式治疗结巴的更多相关文章
- Java——正则表达式(字符串操作)
public class Test1 { /* * 正则表达式:对字符串的常见操作: * 1.匹配: * 其实是用的就是string类中的matches(匹配)方法. * 2.切割 * 其实 ...
- Python 结巴分词(1)分词
利用结巴分词来进行词频的统计,并输出到文件中. 结巴分词github地址:结巴分词 结巴分词的特点: 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成 ...
- Python 结巴分词模块
原文链接:http://www.gowhich.com/blog/147?utm_source=tuicool&utm_medium=referral PS:结巴分词支持Python3 源码下 ...
- 关于JDK中正则表达式
正则表达式的构造摘要 构造 匹配 字符 x 字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn ...
- java学习——正则表达式
本文内容来源于 历经5年锤练--史上最适合初学者入门的Java基础视频 例:要求QQ号长度为5~15位,不能以0开头 String qq="123456"; String reg ...
- 结巴(jieba)中文分词及其应用实践
中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...
- Java基础七-正则表达式
Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...
- (转)LUA正则表达式不完全指南
转自剑侠论坛,并稍微修改个别文字. 好不容易闲下来,研究了一下正则表达式,然后越钻越深,经过跟大神们讨论学习后,就没有然后了.总之╮(╯▽╰)╭很有用的一个东西,至少对于用户输入的读取方面会比较方便, ...
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
随机推荐
- Eclipse下使用SVN版本控制
作者:朱先忠编译 转自天极[url]http://dev.yesky.com/356/2578856.shtml[/url] 简单介绍一些基本操作1.同步在Eclipse下,右击你要同步的工程-tea ...
- js 获取json串中的值
用js中著名的eval函数var strJSON = "{name:'json name'}";//得到的JSONvar obj = eval( "(" + s ...
- js实现页面跳转的几种方式
第一种: <script language="javascript" type="text/javascript"> wi ...
- coursera机器学习笔记-多元线性回归,normal equation
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- 如何在centos上安装epel源
一.EPEL是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/Cent ...
- Android 的 Handler 总结
<一> Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管 ...
- linux-3.14.13 看到mpls gso支持
在net/Kconfig source "net/mpls/Kconfig"
- 系统进程 zygote(三)—— app_process 的 main 函数
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 首先: , , , ) < ) { // Older kernels don't understand ...
- bg激活后台运行的服务
按redis重启来做案例 ./redis-server Ctrl+z让执行的命令在后台暂停 [1]+ Stopped ./redis-server 这个时候他是把这个服务放到后台了,可是ctrl+z是 ...
- TFS - 使用微软测试管理器实现跨团队项目的测试用例管理
在团队项目之间实现测试用例和测试计划的共享,是很多客户关注的问题.尤其在开发产品+服务的团队中,对测试用例的共享要求比较高.下面就如何在Team Foundation Server中如何实现团队项目之 ...