首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 字符串處理:將連續重複字符替換為單一字符的多種方法

     編輯:PHP 綜合知識

PHP 字符串連續字符去重實戰指南

在 PHP 開發中,經常需要處理字符串中的連續重複字符,例如將多個空格合併為一個、將連續的特定字符簡化等。本文將介紹五種不同的實現方法,從正則表達式到循環遍歷,幫助你根據場景選擇最合適的方案。

方法一:使用 preg_replace 處理空白字符

最常見的場景是將字符串中的任意連續空白字符(空格、制表符、換行符等)替換為單個空格:

<?php
$str1 = 'A B C ';
echo preg_replace("/\s+/", ' ', $str1);
// 輸出: A B C
?>

\s+ 匹配一個或多個空白字符,將其替換為單個空格。

方法二:針對特定字符去重

如果只需要處理特定字符(如 'M'),可以直接在正則中指定:

<?php
$str1 = 'AMMMBMMMMCMM ';
echo preg_replace("/M+/", 'M', $str1);
// 輸出: AMBMMCM
?>

方法三:循環遍歷實現通用去重(版本一)

不使用正則,通過雙層循環實現任意連續字符去重:

<?php
$str1 = 'ACCCB CCCCCGGG OOO YYYFFFXXXZZZZZ';
$str2 = '';
for ($i = 0; $i < strlen($str1); $i++) {
    $str2 .= $str1[$i];
    $j = 1;
    while ($str1[$i] == $str1[$i + $j]) {
        $j++;
    }
    $i = $i + $j - 1;
}
echo $str2;
// 輸出: ACB CG O YFXZ
?>

這種方法通過內層 while 循環跳過連續相同的字符,外層 for 循環控制主索引。

方法四:循環遍歷實現通用去重(版本二,更高效)

只需單次遍歷,記錄上一字符進行比較:

<?php
$str1 = 'ACCCB CCCCCGGG OOO YYYFFFXXXZZZZZ';
$len = strlen($str1);
$str2 = $str1[0];
$ch = $str2;
for ($i = 1; $i < $len; $i++) {
    $ch2 = $str1[$i];
    if ($ch != $ch2) {
        $str2 .= $ch2;
        $ch = $ch2;
    }
}
echo $str2;
// 輸出: ACB CG O YFXZ
?>

這種方法時間複雜度為 O(n),比雙層循環更高效,推薦在不使用正則時使用。

方法五:正則表達式回引用實現通用去重(最簡潔)

利用正則捕獲組和回引用 \1 實現:

<?php
$str1 = 'ACCCB CCCCCGGG OOO YYYFFFXXXZZZZZ';
echo preg_replace("/(.)\1+/", "\1", $str1);
// 輸出: ACB CG O YFXZ
?>

(.) 捕獲任意單字符,\1+ 匹配該字符連續出現一次或多次,替換為捕獲的單字符 \1。這是代碼最簡潔、性能也較好的方案。

總結建議

  • 簡單場景:優先使用 preg_replace("/(.)\1+/", "\1", $str),一行代碼解決問題
  • 特定字符:使用 preg_replace("/字符+/", "字符", $str)
  • 不支援正則環境:使用方法四的單次遍歷算法
  • 教學/理解原理:方法三展示了基礎的指針/索引控制邏輯

掌握這些方法,能讓你在處理字符串去重需求時遊刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved