php去掉多字节字符串,从多字节字符串中剥离重复字符的PHP方法?

这篇博客探讨了在PHP中使用正则表达式处理UTF-8字符序列,特别是汉字,以及如何查找和计数字符串中的唯一字符。文章通过示例展示了如何使用preg_replace函数消除重复字符,并使用mb_strlen和mb_substr进行字符计数。同时,还提到了一个类似mb_str_split的功能,用于简化操作。
摘要由CSDN通过智能技术生成

嘿戴夫,你永远不会看到这一个来.

php > $kanji = '漢漢漢字漢字私私字私字漢字私漢字漢字私';

php > $not_kanji = 'aaabcccbbc';

php > $pattern = '/(.)\1+/u';

php > echo preg_replace($pattern, '$1', $kanji);

漢字漢字私字私字漢字私漢字漢字私

php > echo preg_replace($pattern, '$1', $not_kanji);

abcbc

什么,你以为我会再次使用mb_substr?

在正则表达式中,它正在寻找任何一个字符,然后是同一个字符的一个或多个实例.然后将匹配的区域替换为匹配的一个字符.

u modifier在PCRE中打开UTF-8模式,其中它处理UTF-8序列而不是8位字符.只要正在处理的字符串已经是UTF-8并且PCRE是使用Unicode支持编译的,这对你来说应该可以正常工作.

嘿,你猜怎么着!

$not_kanji = 'aaabbbbcdddbbbbccgggcdddeeedddaaaffff';

$l = mb_strlen($not_kanji);

$unique = array();

for($i = 0; $i < $l; $i++) {

$char = mb_substr($not_kanji, $i, 1);

if(!array_key_exists($char, $unique))

$unique[$char] = 0;

$unique[$char]++;

}

echo join('', array_keys($unique));

这使用与shuffle代码相同的一般技巧.我们获取字符串的长度,然后使用mb_substr一次提取一个字符.然后我们将该字符用作数组中的键.我们正在利用PHP的位置数组:键按照它们的定义顺序排序.一旦我们浏览完字符串并识别出所有字符,我们就会按照它们出现在字符串中的顺序抓住键并加入.您还可以通过此技术获得每个字符的字符数.

如果像mb_str_split这样的东西与str_split一起出现,这将会容易得多.

(这里没有Kanji示例,我遇到了复制/粘贴错误.)

在这里,尝试这个大小:

function mb_count_chars_kinda($input) {

$l = mb_strlen($input);

$unique = array();

for($i = 0; $i < $l; $i++) {

$char = mb_substr($input, $i, 1);

if(!array_key_exists($char, $unique))

$unique[$char] = 0;

$unique[$char]++;

}

return $unique;

}

function mb_string_chars_diff($one, $two) {

$left = array_keys(mb_count_chars_kinda($one));

$right = array_keys(mb_count_chars_kinda($two));

return array_diff($left, $right);

}

print_r(mb_string_chars_diff('aabbccddeeffgg', 'abcde'));

/* =>

Array

(

[5] => f

[6] => g

)

*/

你需要调用两次,第二次调用左边的字符串,右边的字符串调用左边的字符串.输出将是不同的 – array_diff只是给你左边缺少的东西,所以你必须做两次才能得到整个故事.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值