2017-09-16 2 views
2

Im essayant de gsub remplacer une chaîne en utilisant un groupe 10 mais au lieu de ce rubis remplacer par groupe 1 et 0 j'utiliser dans gsub remplacementcomment je pourrais regex ruby ​​remplacer par groupe 10 en utilisant gsub?

gsub \\10xp 
    "smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff".gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/,"\\10xp") 

pour remplacer et obtenir le groupe 1 et la chaîne « 0XP "

Comment je pouvais résoudre ce

S'il vous plaît aidez-moi

Répondre

2

Je ne sais pas comment référencer un groupe de capture à deux chiffres, mais vous pouvez toujours faire référence à un nom avec somethi ng comme:

"smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff". 
    gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (?<ten>\S+)/, 
     '\k<ten>xp') 
# "ssfsffxp" 
+1

Ceci est la seule façon Ruby. [Les autres moteurs de regex ont les moyens de gérer ces situations] (http://www.rexegg.com/regex-capture.html). –

2

Aucun moteur d'expressions rationnelles connu ne supporte groupes anonymes au-delà de la région [0..9]. Utilisez named_captures à la place, ou utiliser des groupes non capturés (?:...), ou plus sage regex:

"smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff". 
    gsub(/((?:\S+\s+){9})(\S+)/, "\\1 \\2xp") 

#      ⇑ second group 
#     ⇑⇑⇑ nine times 
#  ⇑⇑⇑ don’t capture this! 
#  ⇑ first group