正则表达式掩盖了字符串中的字符

时间:2014-04-04 22:32:26

标签: regex string replace str-replace

可能已经提出要求,但我需要在下面更换面具的正则表达式模式(结尾前的n个字符,长度为m)

n=3
m=4
In1Ex:ABCDEFG12345678 -> Out1Ex: ABCDEFG1****678
In2Ex:GFEDCBA876453 -> Out2Ex: GFEDCB****453


n=6
m=2
In3Ex:ABCDEFG12345678910 -> Out3Ex: ABCDEFG123**678910
In4Ex:GFEDCBA87645321 -> Out4Ex: GFEDCBA8**45321

1 个答案:

答案 0 :(得分:1)

this expression之类的东西会让你开始:

.{4}(?=.{3}$)
.{2}(?=.{6}$)

这匹配任何4(2)个字符,后跟最后3(6)个字符。根据语言,您可以根据动态长度进行替换。在PHP中:

$n = 3;
$m = 4;

$string = 'ABCDEFG12345678';
echo preg_replace('/.{' . $m . '}(?=.{' . $n . '}$)/', str_repeat('*', $m), $string);
// ABCDEFG1****678

更深入的RegExp解释:

.{4}         # matches any 4 characters
(?=          # start a "lookahead"
  .{3}       # matches any 3 characters
  $          # matches the end of the string
)            # end the "lookahead"

这意味着你会发现4个字符后面跟着3个字符和字符串的结尾。 Lookaheads不会作为匹配返回,因此您仍然只是替换匹配的4个字符。