我在Ruby中有一個電子郵件地址,我需要通過用星號替換除了前3個和後3個以外的所有字符來進行混淆。換句話說:如果「[email protected]」是輸入,輸出應該是「abc ************* com」如何使用正則表達式進行部分替換?
Ruby有一個gsub方法,它可以用給定的字符串替換所有出現的模式。我應該寫什麼正則表達式匹配所有將被星號替換的字符?換句話說,與前三個中的前三個NOR中的所有字符都不匹配的模式?
我在Ruby中有一個電子郵件地址,我需要通過用星號替換除了前3個和後3個以外的所有字符來進行混淆。換句話說:如果「[email protected]」是輸入,輸出應該是「abc ************* com」如何使用正則表達式進行部分替換?
Ruby有一個gsub方法,它可以用給定的字符串替換所有出現的模式。我應該寫什麼正則表達式匹配所有將被星號替換的字符?換句話說,與前三個中的前三個NOR中的所有字符都不匹配的模式?
email.sub(/\A(...)(.*)(...)\z/) {|m| $1 + ("*" * $2.length) + $3 }
1對非正則表達式解決方案投贊成票。
我會做,沒有正則表達式:
email = '[email protected]'
email[3..-4] = '*' * email[3..-4].length
email # => "abc*************com"
你需要的星號的確切數字?如果沒有,你可以使用這個表達式:(。*)
(^.{3})(.*)(.{3}$)
- (^ {3})是第一組只匹配前三個字符
- 邊界組之間everythig匹配
- ({3} $)已經結束組mathing最後三個字符
知道的是,您可以使用正則表達式替換中:
$1*****$3
- $ 1首先匹配組(前三個字符)
- 它後面五個星號
- $ 3第三匹配組(後三個字符)
嘗試它自己:http://www.regexe.com/並檢查它是否適合你
另一種替代方法:
email.gsub(email[3..-4], "*"*email[3..-4].size)
# => "abc*************com"