簡體   English   中英

字符串壓縮:將AAAbbCCCC轉換為3Abb4C

[英]String compression : Turn AAAbbCCCC into 3Abb4C

我正面臨邏輯問題。 假設我有一個給定的字符串“ AAAbbCCCC”。 我想將其壓縮為“ 3Abb4C”之類的內容。 因此,當一個字符連續重復至少3次(不必要2次,因為它不會壓縮序列),我應該將此序列替換為該字符后的重復次數。

我真的沒有找到如何巧妙地編寫此腳本的方法。 當然,該腳本應適用於所有可能的字符串。 該字符串只能包含大寫或小寫字母(“ A”和“ a”不被視為相同的出現)

這可以通過使用preg_replace_callback來實現:

$string = 'AAAbbCCCCcccgGGG';

$compressed = preg_replace_callback( '/(\pL)\1{2,}/', function( $matches ) {
    return strlen( $matches[0] ) . $matches[1];
}, $string );

echo $compressed;    // 3Abb4C3cg3G 

/*
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \p{L}                    any character of: UTF macro 'L' ( Letter )
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  \1{2,}                   what was matched by capture \1 (at least 2
                           times (matching the most amount possible))                          
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM