Регулярное выражение для маскирования строк с использованием подстановки строк - PullRequest
2 голосов
/ 13 июня 2009

Я хотел бы использовать регулярное выражение для маскировки всех, кроме первых трех буквенно-цифровых символов каждого слова в строке, используя символ маски (например, «x»), поэтому «1 Buckingham Palace Road, London« станет » 1 Buxxxxxxxx Palxxx Roax, Lonxxx ".

Удержание первых трех символов легко сделать с помощью

s/\b(\w{0,3})(.*)\b/$1/g

но я не могу понять, как вставить длину (2 доллара), умноженную на маскирующий символ, вместо 2 долларов.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 13 июня 2009

C #:

new Regex(@"(?<!\b.{0,2}).").Replace("1 Buckingham Palace Road, London", "x");

Поскольку вы говорите, что это не зависит от языка, я верю, что это может быть легко перенесено на ваш язык по выбору ...

Или вы можете просто получить длину $ 2 и заполнить крестики старомодным способом.

1 голос
/ 13 июня 2009

Позитивный вид сзади, любой символ слова с тремя символами слова, прежде чем он будет заменен на X:

з / \ ж / $ 1x / г (<= \ ш {3}?); </p>

пример сценария Perl:

my $string = "1 Buckingham Palace Road, London"; 
$string =~ s/(?<=\w{3})\w/$1x/g; 
print qq($string\n);
0 голосов
/ 13 июня 2009
use warnings;
use strict;

my $string = "1 Buckingham Palace Road, London";

$string =~ s(
  \b(\w{0,3})(\w*)\b
){
  $1 . ( 'x' x length $2 )
}gex;

print $string, "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...