php正则表达式治疗结巴

本文介绍如何利用正则表达式去除字符串中的重复字符,包括纯英文和包含汉字的情况。通过具体实例演示了正则表达式的应用及PHP函数的使用。

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

解决思路是:

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

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/ningheshutong/p/5279676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值