2015-02-24 65 views
0

我在Ruby中有一個電子郵件地址,我需要通過用星號替換除了前3個和後3個以外的所有字符來進行混淆。換句話說:如果「[email protected]」是輸入,輸出應該是「abc ************* com」如何使用正則表達式進行部分替換?

Ruby有一個gsub方法,它可以用給定的字符串替換所有出現的模式。我應該寫什麼正則表達式匹配所有將被星號替換的字符?換句話說,與前三個中的前三個NOR中的所有字符都不匹配的模式?

回答

1
email.sub(/\A(...)(.*)(...)\z/) {|m| $1 + ("*" * $2.length) + $3 } 

1對非正則表達式解決方案投贊成票。

5

我會做,沒有正則表達式:

email = '[email protected]' 

email[3..-4] = '*' * email[3..-4].length 

email # => "abc*************com" 
0

你需要的星號的確切數字?如果沒有,你可以使用這個表達式:(。*)

(^.{3})(.*)(.{3}$) 
  1. (^ {3})是第一組只匹配前三個字符
  2. 邊界組之間everythig匹配
  3. ({3} $)已經結束組mathing最後三個字符

知道的是,您可以使用正則表達式替換中:

$1*****$3 
  1. $ 1首先匹配組(前三個字符)
  2. 它後面五個星號
  3. $ 3第三匹配組(後三個字符)

嘗試它自己:http://www.regexe.com/並檢查它是否適合你

1

另一種替代方法:

email.gsub(email[3..-4], "*"*email[3..-4].size) 
# => "abc*************com"