例如:要将第一分组大写:
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()才起作用?
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 RubisVous remarquerez peut-être que j'ai écrit
'1'
au lieu de1
, car Ruby, en tant que langage général, n'a pas d'objet tel que1
En d'autres termes, vous ne pouvez pas écrire1
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. toPerl
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 correspondanceMais au sens large,
1
est en effet une référence arrière régulière, telle que celle utilisée danssed
,echo str | sed -E 's,(a{2})(b{2}),21,g'
.Explication :
'1'
représente le premier groupe de matchs, c'est-à-direa
, ce qui signifie en répéter deuxa
.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 traitementLes guillemets doubles
"1"
représentent"u0001"
, c'est-à-dire utilisés pour taperunicode
. Le caractère est un caractère. Le'1'
entre guillemets simples estet
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 enRuby
, 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'
paraa
, 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'..'
dans1
> Remplacé par une chaîne entre guillemets.Réponse :
'1.upcase2'
,'1'
et'1'
entre guillemets simples sont remplacés respectivement paraa
etbb
,.upcase
reste inchangé., puis connectez
'1'.upcase
'1'
avec'2'
Chaîne de stockage variable
.upcase
, puis mettre en majuscule'aa'
essayez "1"
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