Maison > Questions et réponses > le corps du texte
例如:要将第一分组大写:
str = '1abc2aabbcc3aaabbbccc4'
pp str.sub(/(a{2})(b{2})/, '\1.upcase\2') # =>"1abc2aa.upcasebbcc3aaabbbccc4" 第一分组怎么没有变大写呢?
pp str.sub(/(a{2})(b{2})/, '\1'.upcase + '\2') # =>"1abc2aabbcc3aaabbbccc4" 奇怪,upcase()还是没起作用!?
pp str.sub(/(a{2})(b{2})/, $1.upcase + '\2') # =>"1abc2AAbbcc3aaabbbccc4" 使用$1而不是'\1',upcase()才起作用?
我想大声告诉你2017-04-24 16:01:42
Deux problèmes sont impliqués ici :
1, '1'
et , la différence entre les deux références arrière
2, la différence subtile entre les guillemets simples '
et les guillemets doubles "
dans Rubis
Vous remarquerez peut-être que j'ai écrit '1'
au lieu de 1
, car Ruby, en tant que langage général, n'a pas d'objet tel que 1
En d'autres termes, vous ne pouvez pas écrire 1
seul .
Question 1 :
'1'
est utilisé dans la correspondance, est utilisé en dehors de la correspondance.
est essentiellement une variable globale. Tant qu'une correspondance régulière se produit,
Ruby
mettra à jour ces variables globales. to Perl
Conception régulière '1'
est essentiellement une chaîne, mais est utilisée comme référence arrière pour le groupe lors de la correspondance
Mais au sens large, 1
est en effet une référence arrière régulière, telle que celle utilisée dans sed
, echo str | sed -E 's,(a{2})(b{2}),21,g'
.
str =~ /(a{2})(b{2})/
#=> 'aa'
str =~ /(a)(b)/
#=> 'a'
str.sub(/(a{2})(b{2})/, '') #=> 1abc2bbaacc3aaabbbccc4
Explication : '1'
représente le premier groupe de matchs, c'est-à-dire a
, ce qui signifie en répéter deux a
.
Mais un point particulier est que lors du remplacement, vous pouvez également utiliser '1'
.
Question 2 :
Dans la plupart des cas, '
et "
sont utilisés de la même manière, mais il existe des différences dans le traitement Les guillemets doubles
"1"
représentent "u0001"
, c'est-à-dire utilisés pour taper unicode
. Le caractère est un caractère. Le '1'
entre guillemets simples est et
1
, qui sont deux caractères. Comme mentionné ci-dessus, son essence est une chaîne lors de l'exécution de '1'.upcase
, il est exécuté sur les deux caractères. . Majuscules, mais en Ruby
, la méthode #upcase
pour les caractères non minuscules se renvoie d'elle-même.
Compte tenu de ce que vous voulez dire ici, vous devez d'abord remplacer '1'
par aa
, puis exécuter la méthode #upcase
, puis remplacer la chaîne d'origine. Pour autant que je sache, cela ne peut être fait que si Ruby est utilisé. est dans le langage Fournissez une nouvelle syntaxe au niveau, sinon '1'
n'est qu'une chaîne et sa référence au groupe correspondant n'est pas un processus stocké dans une variable. On suppose que le processus exécuté en bas changera automatiquement. le '..'
dans 1
> Remplacé par une chaîne entre guillemets.
Réponse :
'1.upcase2'
, '1'
et '1'
entre guillemets simples sont remplacés respectivement par aa
et bb
, .upcase
reste inchangé.
, puis connectez '1'.upcase
'1'
avec '2'
Chaîne de stockage variable .upcase
, puis mettre en majuscule 'aa'
天蓬老师2017-04-24 16:01:42
Lorsque des paramètres sont transmis à une méthode, les paramètres sont calculés en premier, puis les résultats sont transmis à la méthode