Chaîne de rubis
Les objets String dans Ruby sont utilisés pour stocker ou manipuler des séquences d'un ou plusieurs octets.
Les chaînes Ruby sont divisées en chaînes de guillemets simples (') et en chaînes de guillemets doubles ("). La différence est que les chaînes de guillemets doubles peuvent prendre en charge plus de caractères d'échappement.
Chaîne de guillemets simples Chaîne
La chaîne la plus simple est une chaîne entre guillemets simples, c'est-à-dire stocker la chaîne entre guillemets simples :
'这是一个 Ruby 程序的字符串'
Si vous devez utiliser des guillemets simples à l'intérieur d'une chaîne entre guillemets simples, alors vous devez utiliser une barre oblique inverse ( ) dans une chaîne entre guillemets simples afin que l'interpréteur Ruby ne pense pas que le caractère guillemet simple est le symbole de fin de la chaîne :
'Won\'t you read O\'Reilly\'s book?'
Une barre oblique inverse peut également échapper à une autre barre oblique inverse afin que la deuxième barre oblique inverse elle-même n'est pas interprété comme un caractère d'échappement.
Les fonctionnalités suivantes sont liées aux chaînes dans Ruby.
Dans les chaînes entre guillemets, nous pouvons utiliser
#{}les signes dièse et accolades pour calculer la valeur des expressions : Variables intégrées dans des chaînes :
#!/usr/bin/ruby # -*- coding: UTF-8 -*- name1 = "Joe" name2 = "Mary" puts "你好 #{name1}, #{name2} 在哪?"
Le résultat de l'exemple ci-dessus est :
你好 Joe, Mary 在哪?
Opérations mathématiques dans la chaîne :
#!/usr/bin/ruby # -*- coding: UTF-8 -*- x, y, z = 12, 36, 72 puts "x 的值为 #{ x }" puts "x + y 的值为 #{ x + y }" puts "x + y + z 的平均值为 #{ (x + y + z)/3 }"
La sortie de l'exemple ci-dessus est Le résultat de sortie est :
x 的值为 12 x + y 的值为 48 x + y + z 的平均值为 40
Ruby prend également en charge une variable de chaîne guidée par %q et %Q. %q utilise une règle de guillemet simple, et %Q est une règle de guillemets doubles. Ce qui suit Puis un autre (! [ { Le délimiteur de début de etc. et } ] ) Le délimiteur de fin de etc.
Le caractère suivant q ou Q est le délimiteur. Le délimiteur peut être n'importe quel caractère non alphanumérique à un octet. Par exemple : [, {, (, <,!, etc., la chaîne sera lue jusqu'à ce que. un terminateur correspondant est trouvé.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- desc1 = %Q{Ruby 的字符串可以使用 '' 和 ""。} desc2 = %q|Ruby 的字符串可以使用 '' 和 ""。| puts desc1 puts desc2
Le résultat de l'exemple ci-dessus est :
Ruby 的字符串可以使用 '' 和 ""。 Ruby 的字符串可以使用 '' 和 ""。
Caractères d'échappement
L'indicerépertorie l'échappement. caractères ou caractères non imprimables qui peuvent être échappés à l'aide du symbole barre oblique inverse <. 🎜>
Remarque :
Dans une chaîne entourée de guillemets doubles, les caractères d'échappement seront analysés dans une chaîne entourée de guillemets simples. , les caractères d'échappement ne seront pas analysés tels quels.
反斜杠符号 | 十六进制字符 | 描述 |
---|---|---|
a | 0x07 | 报警符 |
b | 0x08 | 退格键 |
cx | Control-x | |
C-x | Control-x | |
e | 0x1b | 转义符 |
f | 0x0c | 换页符 |
M-C-x | Meta-Control-x | |
n | 0x0a | 换行符 |
nnn | 八进制表示法,其中 n 的范围为 0.7 | |
r | 0x0d | 回车符 |
s | 0x20 | 空格符 |
t | 0x09 | 制表符 |
v | 0x0b | 垂直制表符 |
x | 字符 x | |
xnn | 十六进制表示法,其中 n 的范围为 0.9、 a.f 或 A.F |
Codage des caractères
Le jeu de caractères par défaut de Ruby est ASCII et les caractères peuvent être représentés par un seul octet. Si vous utilisez UTF-8 ou d'autres jeux de caractères modernes, les caractères peuvent être représentés par un à quatre octets.
Vous pouvez modifier le jeu de caractères en utilisant $KCODE au début de votre programme, comme ceci :
$KCODE = 'u'
Voici les valeurs possibles pour $KCODE.
编码 | 描述 |
---|---|
a | ASCII (与 none 相同)。这是默认的。 |
e | EUC。 |
n | None (与 ASCII 相同)。 |
u | UTF-8。 |
Méthodes intégrées String
Nous avons besoin d'une instance d'un objet String pour appeler la méthode String. Voici comment créer une instance d'un objet String :
new [String.new(str="")]
Cela renverra un nouvel objet String contenant une copie de str. Désormais, en utilisant l'objet str, nous pouvons appeler n'importe laquelle des méthodes d'instance disponibles. Par exemple :
#!/usr/bin/ruby myStr = String.new("THIS IS TEST") foo = myStr.downcase puts "#{foo}"
Cela produira le résultat suivant :
this is test
Voici les méthodes de chaîne publiques (en supposant que str est un objet String) :
Numéro de série | Méthode et description |
---|---|
1 | str % arg Formater les chaînes à l'aide des spécifications de format. Si arg contient plusieurs substitutions, alors arg doit être un tableau. Pour plus d'informations sur les spécifications de format, consultez sprintf sous « Modules du noyau ». |
2 | str * integer Renvoie une nouvelle chaîne contenant des chaînes entières. En d’autres termes, str est répété plusieurs fois entières. |
3 | str + other_str Concaténer other_str à str. |
4 | str << obj Concatène un objet à une chaîne. Si l'objet est un nombre fixe Fixnum compris dans la plage 0,255, il est converti en caractère. Comparez cela à concat. |
5 | str <=> other_str Comparez str avec other_str et retournez -1 (inférieur à), 0 ( égal à) ou 1 (supérieur à). Les comparaisons sont sensibles à la casse. |
6 | str == obj Vérifie l'égalité de str et obj. Renvoie false si obj n'est pas une chaîne, true si str <=> |
7 | str =~ obj Correspond à str selon le modèle d'expression régulière obj. Renvoie la position où commence la correspondance, sinon renvoie false. |
8 | |
9 | str.capitalize Convertissez la chaîne en lettres majuscules pour l'affichage. |
10 | str.capitalize! Identique à majuscule, mais str est modifié et renvoyé. |
11 | str.casecmp Comparaison de chaînes insensibles à la casse. |
12 | str.center Centrez la chaîne. |
13 | str.chomp Supprimez le séparateur d'enregistrement ($/) de la fin de la chaîne, généralement n. S'il n'y a pas de séparateur d'enregistrements, aucune action n'est effectuée. |
14 | str.chomp! Identique à chomp, mais str est modifié et renvoyé. |
15 | str.chop Supprimer le dernier caractère de str. |
16 | str.chop! Identique à chop, mais str est modifié et renvoyé. |
17 | str.concat(other_str) Concaténer other_str à str. |
18 | str.count(str, ...) Donne un nombre à un ou plusieurs jeux de caractères. S'il existe plusieurs jeux de caractères, l'intersection de ces jeux est comptée. |
19 | str.crypt(other_str) Appliquer un hachage cryptographique unidirectionnel à str. L'argument est une chaîne de deux caractères, chaque caractère étant compris entre a.z, A.Z, 0.9, . ou /. |
20 | str.delete(other_str, ...) Renvoie une copie de str avec tous les caractères à l'intersection des arguments supprimés. |
21 | str.delete!(other_str, ...) Identique à delete, mais str changera et reviendra . |
22 | str.downcase Renvoie une copie de str, avec toutes les lettres majuscules remplacées par des lettres minuscules. |
23 | str.downcase ! Identique à downcase, mais str sera modifié et renvoyé. |
24 | str.dump Renvoie une version de str avec tous les caractères non imprimables remplacés par des symboles nnn et tous les caractères spéciaux sont échappés. |
25 | str.each(separator=$/) { |substr| block } Utiliser le paramètre comme séparateur d'enregistrement ( Le la valeur par défaut est $/) chaîne délimitée, passant chaque sous-chaîne au bloc fourni. |
26 | str.each_byte { |fixnum| block } Passer chaque octet de str au bloc, en octets La représentation décimale de chaque octet est renvoyé. |
27 | str.each_line(separator=$/) { |substr| block } Utiliser le paramètre comme séparateur d'enregistrement ( Le la valeur par défaut est $/) chaîne délimitée, passant chaque sous-chaîne au bloc fourni. |
28 | str.empty? Renvoie vrai si str est vide (c'est-à-dire a une longueur de 0). |
29 | str.eql?(other) Si deux chaînes ont la même longueur et le même contenu, alors ces deux chaînes sont égal. |
30 | str.gsub(modèle, remplacement) [ou] str.gsub(modèle) { |match| bloc } Renvoie une copie de str, avec toutes les occurrences de pattern remplacées par la valeur de remplacement ou de bloc. pattern est généralement une expression régulière ; s'il s'agit d'une chaîne, aucun métacaractère d'expression régulière n'est interprété (c'est-à-dire que /d/ correspondra à un chiffre, mais « d » correspondra à une barre oblique inverse suivie d'un « d »). |
31 | str[fixnum] [ou] str[fixnum,fixnum] [ou] str[range] [ou] str[regexp] [ ou] str[regexp, fixnum] [ou] str[other_str] Utilisez les paramètres suivants pour référencer str : si le paramètre est un Fixnum, alors l'encodage de caractères de fixnum est renvoyé si le paramètre est deux ; Fixnum, puis un de La sous-chaîne commençant à partir du décalage (le premier fixnum) et se terminant à la longueur (le deuxième fixnum) si le paramètre est range, une sous-chaîne dans la plage est renvoyée si le paramètre est regexp, la partie de ; la chaîne correspondante est renvoyée ; si le paramètre est une expression rationnelle avec fixnum, alors les données correspondantes à la position fixnum seront renvoyées ; si le paramètre est other_str, alors la sous-chaîne correspondant à other_str sera renvoyée ; Un Fixnum négatif commence à -1 à partir de la fin de la chaîne. |
32 | str[fixnum] = fixnum [ou] str[fixnum] = new_str [ou] str[fixnum, fixnum] = new_str [ou ] str[plage] = aString [ou]
str[regexp] =new_str [ou] str[regexp, fixnum] =new_str [ou] str[other_str] = new_str ] Remplace une chaîne entière ou une partie de chaîne. Synonyme de tranche !. |
33 | str.gsub!(modèle, remplacement) [ou] str.gsub!(modèle) { |match| bloc } Effectuez le remplacement de String#gsub et renvoyez str Si aucun remplacement n'est effectué, il renvoie nil. |
34 | str.hash Renvoie un hachage basé sur la longueur et le contenu de la chaîne. |
35 | str.hex Traitez le caractère principal de str comme une chaîne de chiffres hexadécimaux (un symbole facultatif et un symbole facultatif 0x), et renvoie le numéro correspondant. Renvoie zéro si une erreur se produit. |
36 | str.include? other_str [or] str.include Si str contient la chaîne ou le caractère donné, renvoie vrai. |
37 | str.index(substring [, offset]) [ou] str.index(fixnum [, offset]) [ou ] str.index(regexp [, offset]) Renvoie l'index de la première occurrence de la sous-chaîne, du caractère (fixnum) ou du modèle (regexp) donné dans str. Renvoie zéro s'il n'est pas trouvé. Si le deuxième argument est fourni, spécifie la position dans la chaîne pour commencer la recherche. |
38 | str.insert(index, other_str) Insérer other_str avant le caractère à l'index donné, en modifiant str. Les index négatifs comptent à partir de la fin de la chaîne et sont insérés après le caractère donné. L'intention est d'insérer une chaîne commençant à l'index donné. |
39 | str.inspect Renvoie une version imprimable de str, avec des caractères spéciaux échappés. |
40 | str.intern [or] str.to_sym Renvoie le symbole correspondant à str, s'il n'existe pas avant , Le symbole est créé. |
41 | str.length Renvoie la longueur de str. Comparez-le à la taille. |
42 | str.ljust(integer, padstr=' ') Si l'entier est supérieur à la longueur de str, le la longueur renvoyée est une nouvelle chaîne d'entiers, alignée à gauche avec str et complétée par padstr. Sinon, str est renvoyé. |
43 | str.lstrip Renvoie une copie de str avec les espaces de début supprimés. |
44 | str.lstrip! Supprime les espaces de début de str ou renvoie zéro s'il n'y a aucun changement. |
45 | str.match(pattern) Si le modèle n'est pas une expression régulière, convertissez le modèle en expression régulière Regexp , et appelle ensuite sa méthode de correspondance sur str. |
46 | str.oct Traitez le caractère principal de str comme une chaîne de chiffres décimaux (un symbole facultatif) , et renvoie le numéro correspondant. Si la conversion échoue, 0 est renvoyé. |
47 | str.replace(other_str) Remplacez le contenu dans str par la valeur correspondante dans other_str. |
48 | str.reverse Renvoie une nouvelle chaîne qui est l'ordre inverse de str. |
49 | str.reverse ! Inverser la str, la str changera et reviendra. |
50 | str.rindex(substring [, fixnum]) [ou] str.rindex(fixnum [, fixnum]) [ou ] str.rindex(regexp [, fixnum]) Renvoie l'index de la dernière occurrence de la sous-chaîne, du caractère (fixnum) ou du modèle (regexp) donné dans str. Renvoie zéro s'il n'est pas trouvé. Si le deuxième argument est fourni, spécifie la position dans la chaîne à laquelle terminer la recherche. Les personnages au-delà de ce point ne seront pas pris en compte. |
51 | str.rjust(integer, padstr=' ') Si l'entier est supérieur à la longueur de str, le la longueur renvoyée est une nouvelle chaîne d'entiers, alignée à droite avec str et complétée par padstr. Sinon, str est renvoyé. |
52 | str.rstrip Renvoie une copie de str avec les espaces de fin supprimés. |
53 | str.rstrip! Supprimez les espaces de fin de str ou renvoyez nil s'il n'y a aucun changement. |
54 | str.scan(motif) [ou] str.scan(motif) { |match, ...| bloc } Deux formes correspondent à un modèle (peut être une expression régulière Regexp ou une chaîne String) pour parcourir str. Pour chaque correspondance, un résultat est généré, qui est ajouté au tableau de résultats ou transmis au bloc. Si le modèle ne contient aucun regroupement, chaque résultat individuel est constitué de la chaîne correspondante, $&. Si le modèle contient des groupes, chaque résultat individuel est un tableau contenant une entrée pour chaque groupe. |
55 | str.slice(fixnum) [ou] str.slice(fixnum, fixnum) [ou] str.slice(range ) [ou] str.slice(regexp) [ou] str.slice(regexp, fixnum) [ou] str.slice(other_str) Voir str[fixnum], etc. str.slice !(fixnum) [ou] str.slice!(fixnum, fixnum) [ou] str.slice!(range) [ou] str.slice!(regexp) [ou] str.slice!(other_str) Supprime la partie spécifiée de str et renvoie la partie supprimée. Si la valeur est hors plage et que l'argument prend la forme Fixnum, une IndexError sera générée. Si le paramètre est sous forme de plage, une RangeError sera générée. Si le paramètre est sous forme de Regexp et String, l'action d'exécution sera ignorée. |
56 | str.split(pattern=$;, [limit]) En fonction du délimiteur, mettez str Divise en sous-chaînes et renvoie un tableau de ces sous-chaînes. Si motif est une chaîne, il sera utilisé comme séparateur lors de la division de str. Si pattern est un seul espace, str est divisé en fonction des espaces, et les espaces de début et les caractères d'espacement consécutifs sont ignorés. Si motif est une expression régulière Regexp, str est divisé là où le motif correspond. Lorsque pattern correspond à une chaîne de longueur 1, str est divisé en caractères individuels. Si le paramètre pattern est omis, la valeur de $; Si $; est nul (valeur par défaut), str est divisé sur les espaces, comme si ` ` était spécifié comme séparateur. Si le paramètre limit est omis, les champs nuls de fin sont supprimés. Si limit est un nombre positif, un nombre maximum de champs est renvoyé (si limit est 1, la chaîne entière est renvoyée comme seule entrée du tableau). Si limit est un nombre négatif, le nombre de champs renvoyés est illimité et les champs nuls de fin ne sont pas supprimés. |
57 | str.squeeze([other_str]*) Créez une chaîne à partir du paramètre other_str en utilisant la procédure décrite pour String #count personnages de la série. Renvoie une nouvelle chaîne dans laquelle les occurrences de caractères identiques dans l'ensemble sont remplacées par un seul caractère. Si aucun argument n'est donné, tous les caractères identiques sont remplacés par un seul caractère. |
58 | str.squeeze!([other_str]*) Identique à squeeze, mais str changera et reviendra, renvoie nul s’il n’y a aucun changement. |
59 | str.strip Renvoie une copie de str avec les espaces de début et de fin supprimés. |
60 | str.strip! Supprimez les espaces de début et de fin de str et revenez s'il n'y a pas de changement nul. |
61 | str.sub(motif, remplacement) [ou] str.sub(motif) { |match| bloc } Renvoie une copie de str. La première occurrence de pattern sera remplacée par la valeur de remplacement ou de bloc. pattern est généralement une expression régulière Regexp ; s’il s’agit d’une chaîne, aucun métacaractère d’expression régulière n’est interprété. |
62 | str.sub!(modèle, remplacement) [ou] str.sub!(modèle) { |match| block } Effectuer le remplacement de String#sub et renvoyer str Si aucun remplacement n'est effectué, nil est renvoyé. |
63 | str.succ [ou] str.next Renvoie l'héritage de str. |
64 | str.succ! [ou] str.next! est équivalent à String#succ, mais str va changer et retour. |
65 | str.sum(n=16) Renvoie la somme de contrôle de n bits des caractères dans str, où n Est un paramètre Fixnum facultatif, la valeur par défaut est 16. Le résultat est simplement la somme des valeurs binaires de chaque caractère dans str, modulo 2n - 1. Ce n'est pas une somme de contrôle particulièrement bonne. |
66 | str.swapcase Renvoie une copie de str, avec toutes les lettres majuscules converties en lettres minuscules et toutes les lettres minuscules convertis sont des lettres majuscules. |
67 | str.swapcase! est équivalent à String#swapcase, mais str changera et reviendra, s'il n'y a pas change puis renvoie zéro. |
68 | str.to_f Renvoie le résultat de l'interprétation du caractère principal de str comme un nombre à virgule flottante. Les caractères supplémentaires au-delà de la fin d'un chiffre valide sont ignorés. S'il n'y a aucun chiffre valide au début de str, 0,0 est renvoyé. Cette méthode ne génère pas d'exception. |
69 | str.to_i(base=10) Renvoie le caractère principal de str interprété comme une base entière (la base est 2, 8, 10 ou 16). Les caractères supplémentaires au-delà de la fin d'un chiffre valide sont ignorés. S'il n'y a aucun chiffre valide au début de str, 0 est renvoyé. Cette méthode ne génère pas d'exception. |
70 | str.to_s [ou] str.to_str Renvoie la valeur reçue. |
71 | str.tr(from_str, to_str) Renvoie une copie de str, en remplaçant les caractères de from_str par les caractères correspondants de to_str. Si to_str est plus court que from_str, il est complété jusqu'au dernier caractère. Les deux chaînes peuvent utiliser la notation c1.c2 pour représenter des plages de caractères. Si from_str commence par ^, cela signifie tous les caractères sauf ceux répertoriés. |
72 | str.tr!(from_str, to_str) Équivalent à String#tr, mais str changera et reviendra, renvoie zéro s'il n'y a pas de changement. |
73 | str.tr_s(from_str, to_str) Traitez str selon les règles décrites par String#tr, puis move Sauf pour les caractères répétés qui affecteraient la traduction. |
74 | str.tr_s!(from_str, to_str) Équivalent à String#tr_s, mais str changera et reviendra, renvoie zéro s'il n'y a pas de changement. |
75 | str.unpack(format) Décoder str (peut contenir des données binaires) en fonction de la chaîne de format et renvoyer l'extrait d'un tableau de chaque valeur. Le caractère de format se compose d'une série d'instructions à un seul caractère. Chaque commande peut être suivie d'un nombre indiquant le nombre de fois où la commande est répétée. L'astérisque (*) utilisera tous les éléments restants. Les directives sSiIll, chacune éventuellement suivie d'un trait de soulignement (_), utilisent la taille native de la plateforme sous-jacente pour le type spécifié, sinon utilisent une taille cohérente indépendante de la plateforme. Les espaces dans la chaîne de format sont ignorés. |
76 | str.upcase Renvoie une copie de str, avec toutes les lettres minuscules remplacées par des lettres majuscules. L'opération est insensible au contexte, seuls les caractères de a à z sont affectés. |
77 | str.upcase ! Modifiez le contenu de str en majuscule ou renvoyez nil s'il n'y a aucun changement. |
78 | str.upto(other_str) { |s| block } Parcourir des valeurs continues, en commençant par str et en terminant par other_str End (inclus), en passant chaque valeur au bloc tour à tour. La méthode String#succ est utilisée pour générer chaque valeur. |
Instructions de décompression de chaîne
Le tableau suivant répertorie les instructions de décompression pour la méthode String#unpack.
Commande | Retour | Description |
---|---|---|
A | Chaîne | Supprimez les valeurs nulles et les espaces de fin. |
une | Chaîne | Chaîne. |
B | String | Extrait les bits de chaque caractère (le bit le plus significatif en premier). |
b | String | Extrait les bits de chaque caractère (le bit le moins significatif en premier). |
C | Fixnum | Extrait un caractère sous forme d'entier non signé. |
c | Fixnum | Extrait un caractère sous forme d'entier. |
D, d | Float | traite la taille des caractères de longueur (double) comme un double natif. |
E | Float | Traitement de la taille des caractères de longueur (double) comme un double dans l'ordre des octets littleendian. |
e | Float | Traitez la taille des caractères de longueur (float) comme un flottant dans l'ordre des octets littleendian. |
F, f | Float | traite la taille des caractères (float) comme des flotteurs natifs. |
G | Float | Traite la taille des caractères de longueur (double) comme double dans l'ordre des octets du réseau. |
g | Float | Traitement de la taille des caractères de longueur (float) comme flottant de l'ordre des octets du réseau. |
H | String | Extrait l'hexagone de chaque caractère (le bit le plus significatif en premier). |
h | String | Extrait l'hexagone de chaque caractère (bit le moins significatif en premier). |
I | Integer | Traite les caractères consécutifs de taille de (int) longueur (modifié par _) comme un entier natif. |
i | Integer | Traite les caractères consécutifs de sizeof(int) length (modifié par _) comme un entier natif signé. |
L | Integer | Traitez quatre caractères consécutifs (modifiés par _) comme un entier long natif non signé. |
l | Integer | Traitez quatre caractères consécutifs (modifiés par _) comme un entier long natif signé. |
M | String | Citation imprimable. |
m | String | Encodage Base64. |
N | Integer | traite quatre caractères comme un long non signé dans l'ordre des octets du réseau. |
n | Fixnum | Traitez deux caractères comme un court non signé dans l'ordre des octets du réseau. |
P | String | traite les caractères sizeof(char *) comme un pointeur et renvoie les caractères emph{len} à partir de la position référencée. |
p | String | traite les caractères sizeof(char *) comme un pointeur vers un caractère terminé par un caractère nul. |
Q | Entier | Traitez huit caractères comme un mot quadruple non signé (64 bits). |
q | Entier | Traitez huit caractères comme un mot quadruple signé (64 bits). |
S | Fixnum | Traitez deux caractères consécutifs (différents si _ est utilisé) comme un court non signé dans l'ordre natif des octets. |
s | Fixnum | Traitez deux caractères consécutifs (différents si _ est utilisé) comme un court signé dans l'ordre natif des octets. |
U | Integer | Caractère UTF-8 sous forme d'entier non signé. |
u | String | Encodage UU. |
V | Fixnum | Traitez quatre caractères comme un long non signé dans l'ordre des octets petit-boutiste. |
v | Fixnum | Traitez deux caractères comme un court non signé dans l'ordre des octets petit-boutiste. |
w | Integer | BER entier compressé. |
X | Sauter un caractère en arrière. | |
x | Avancer d'un caractère. | |
Z | String | Utilisé avec *, supprime les valeurs nulles de fin jusqu'à la première valeur nulle. |
@ | Ignore le décalage donné par le paramètre de longueur. |
Exemples
Essayez les exemples suivants pour décompresser diverses données.
"abc rrreeerrreeeabc rrreeerrreee".unpack('A6Z6') #=> ["abc", "abc "] "abc rrreeerrreee".unpack('a3a3') #=> ["abc", " rrreee0rrreee0"] "abc rrreeeabc rrreee".unpack('Z*Z*') #=> ["abc ", "abc "] "aa".unpack('b8B8') #=> ["10000110", "01100001"] "aaa".unpack('h2H2c') #=> ["16", "61", 97] "\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534] "now=20is".unpack('M*') #=> ["now is"] "whole".unpack('xax2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o"]