情况1.
我有一串像fthhdtrhththjgyhjdtygbh这样的字母表.使用正则表达式我想将其更改为ftxxxxxxxxxxxxxxxxxxxxx,即保留前两个字母并用x替换其余字母.
经过大量的谷歌搜索,我实现了这一点:
s/^(\w\w)(\w+)/$1 . "x" x length($2)/e;
案例2.
我有一串像sdsABCDEABCDEABCDEABCDEABCDEsdf这样的字母表.使用正则表达式我想将其更改为sdsABCDExyxyxyABCDEsdf,即保留第一个和最后一个ABCDE并用xy替换中间的ABCDE.
我做到了这个:
s/ABCDE((ABCDE)+)ABCDE/$len = length($1)\/5; ABCDE."xy"x $len . ABCDE/e;
问题:我对上述问题的解决方案不满意.对于上述问题,有没有更好或更好的解决方案.
约束:只需要使用一个正则表达式.
对不起英文标题和问题的主体,英语不是我的第一语言.如果有任何不明确的地方,请在评论中询问.
最佳答案 任务1:简化密码隐藏正则表达式
使用Positive Lookbehind Assertion替换前面有两个其他单词字符的所有单词字符.这消除了对/e
Modifier的需求:
my $str = 'fthhdtrhththjgyhjdtygbh';
$str =~ s/(?<=\w{2})\w/x/g;
print $str;
输出:
ftxxxxxxxxxxxxxxxxxxxxx
任务2:翻译内部重复模式正则表达式
同时使用Positive Lookbehind和Lookahead Assertion来替换由相同字符串预订的所有ABCDE:
my $str = 'sdsABCDEABCDEABCDEABCDEABCDEsdf';
$str =~ s/(?<=(ABCDE))\1(?=\1)/xy/g;
print $str, "\n";
输出:
sdsABCDExyxyxyABCDEsdf