2017-09-16 1 views
2

임 그룹 (10)를 사용하여 문자열을 대체 GSUB하려고하지만, 대신 루비의 1 군으로 교체하고 0 내가 GSUB 교체에어떻게 내가 정규식 루비 그룹 10 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") 

이 사용에 대한 교체하고 그룹 1과 문자열을 얻어서 "0xp "

내가 해결할 수있는 방법이

나에게 두 자릿수 캡처 그룹을 참조 할,하지만 당신은 언제나 somethi와 이름을 참조 할 수있는 방법 확실하지

답변

2

도와주세요 같은 NG :

"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

이 루비에있는 유일한 방법입니다. [다른 정규식 엔진에는 이러한 상황을 처리 할 수있는 방법이 있습니다.] (http://www.rexegg.com/regex-capture.html). –

2

아무도 알려진 정규식 엔진은 [0..9] 지역을 넘어 이름이 그룹을 지원하지 않습니다. 대신 named_captures를 사용하거나 캡처되지 그룹 (?:...)를 사용하거나 현명 정규식 사용

"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