我在Ruby中有一个电子邮件地址,我需要通过用星号替换除前3个和后3个之外的所有字符进行混淆。换句话说:如果输入“abcd.ef@example.com”,则输出应为“abc ************* com”
Ruby有一个gsub方法,可以用给定的字符串替换所有出现的模式。我应该写什么正则表达式匹配所有要用星号替换的字符?换句话说,一个模式匹配最后三个中前三个NOR中所有字符都是NEITHER?
答案 0 :(得分:5)
我会在没有正则表达式的情况下这样做:
email = 'abcd.ef@example.com'
email[3..-4] = '*' * email[3..-4].length
email # => "abc*************com"
答案 1 :(得分:1)
email.sub(/\A(...)(.*)(...)\z/) {|m| $1 + ("*" * $2.length) + $3 }
对非正则表达式解决方案投了1票。
答案 2 :(得分:1)
另一种选择:
email.gsub(email[3..-4], "*"*email[3..-4].size)
# => "abc*************com"
答案 3 :(得分:0)
您是否需要确切数量的星号?如果不是,您可以使用此正则表达式:
(^.{3})(.*)(.{3}$)
- (^。{3})是第一组仅匹配前三个字符
- (。*)匹配边界组之间的每个标记
- (。{3} $)结束了群组最后三个字符
醇>
知道了,您可以在替换中使用该正则表达式:
$1*****$3
- $ 1是第一个匹配的组(前三个字符)
- 后面跟着五个星号
- $ 3是第三个匹配组(最后三个字符)
醇>
亲自尝试:http://www.regexe.com/并检查它是否适合您