[英]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.