可能已经提出要求,但我需要在下面更换面具的正则表达式模式(结尾前的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
答案 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个字符。