加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

区分一行中的多个正则表达式命中?

发布时间:2020-12-14 06:03:12 所属栏目:百科 来源:网络整理
导读:我正在尝试用Perl中的随机数替换IP地址: while (my $line = file){ $line =~ $regex{'ipadress'}; my $rand0 = int(rand(256)); my $rand1 = int(rand(256)); my $rand2 = int(rand(256)); my $rand3 = int(rand(256)); $ = "$rand0.$rand1.$rand2.$rand3n
我正在尝试用Perl中的随机数替换IP地址:

while (my $line = <file>){
    $line =~ $regex{'ipadress'};

    my $rand0 = int(rand(256));
    my $rand1 = int(rand(256));
    my $rand2 = int(rand(256));
    my $rand3 = int(rand(256));

    $& = "$rand0.$rand1.$rand2.$rand3n";`
}

问题是在某些情况下,一行中有多个IP地址.
如何避免它们都得到相同的随机数?

解决方法

好的开始$&是只读的,你不能像那样分配它来修改目标字符串.

我也不确定你的哈希的关键是否真的是ipadress(有一个),但我相信如果没有,你可以修复它.

我会写这样的东西.替换运算符上的/ e修饰符会导致执行替换字符串以确定要替换匹配的内容. join语句生成从0到255的四个字节值,并用点连接它们以形成随机地址.

while (my $line = <$fh>) {
  $line =~ s{$regex{ipadress}}{
    join '.',map int(rand(256)),0..3
  }eg;
  print $line;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读