regex - 在perl中的一行中更改多个表达式

标签 regex perl

我想取一行包含多个相同结构的表达式,包含 4 位十六进制数字,并根据哈希表更改该结构中的数字。我尝试使用下一个和平的代码:

while ($line =~ s/14'h([0-9,a-f][0-9,a-f][0-9,a-f][0-9,a-f])/14'h$hash_point->{$1}/g){};

其中$hash_point是指向哈希表的指针。

但它告诉我,当我尝试运行以下代码时,我尝试使用未定义的值:

while ($line =~ s/14'h([0-9,a-f][0-9,a-f][0-9,a-f][0-9,a-f])/14'h----/g){print $1," -> ",$hash_point->{$1},"\n";};

它将所有想要的数字更改为“----”,但仅打印了两次值(还有更多更改)。

问题出在哪里?

最佳答案

这是我最后使用的:

$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".$hash_point->{$1}/ge;

并且为了考虑不在我添加的哈希中的数字:

$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".((hash_point->{$1}) or ($1))/ge;

我还想知道哪些数字没有出现在哈希中:

$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".(($hash_point->{$1}) or (print "number $1 didn't change\n") &&($1))/ge;

最后,我希望能够控制是否打印前一阶段的按摩,我添加了 $flag 的使用,仅当我希望按摩时才定义它出现:

$line =~ s/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/"14'h".(($hash_point->{$1}) or (((defined($flag)) && (print "number $1 didn't change\n")) or ($1)))/ge;

关于regex - 在perl中的一行中更改多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396582/

相关文章:

perl - 为什么我不能像我期望的那样引用一个(特定的)Perl 数组?

perl - 部署 Perl 应用程序

Javascript REGEX 不以某些特殊字符结尾但返回 true

Mysql搜索、快速回复问题

c# - 简单的正则表达式不匹配

c - 在正则表达式中匹配正斜杠

mysql - perl DBIx::类::架构

Perl - 使用逐行变量循环 SSH 命令

excel - 如何在电子邮件中找到国家/地区缩写

perl - 在 Perl 中创建哈希