正则表达式 - 正则分组匹配时,使用’\n ‘与 $n 为什么不同?
ringa_lee
ringa_lee 2017-04-24 15:59:42
0
3
970

例如:要将第一分组大写:
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()才起作用?

ringa_lee
ringa_lee

ringa_lee

répondre à tous(3)
我想大声告诉你

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é.

  • est

    , puis connectez '1'.upcase'1' avec '2'

  • ,

    Chaîne de stockage variable .upcase, puis mettre en majuscule 'aa'

左手右手慢动作

essayez "1"

Peter_Zhu

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!