Perl:替换二进制内容

chr*_*s01 2 regex perl binaryfiles

我需要用Perl中的其他内容(文本或二进制)替换二进制内容.

如果内容是文本的,我可以使用s ///来替换内容.

 my $txt = "tomturbo";
 $txt =~ s/t/T/g;      # TomTurbo
Run Code Online (Sandbox Code Playgroud)

但如果内容是二进制的,那就不起作用了.

有没有一种简单的方法来处理?

谢谢!

ike*_*ami 5

Perl的正则表达式引擎将使用任意字符串.

s/t/T/g
Run Code Online (Sandbox Code Playgroud)

没有什么不同

s/\x{74}/\x{54}/g
Run Code Online (Sandbox Code Playgroud)

这意味着它会将字符值从74 16更改为54 16.正则表达式引擎不关心值74 16是否意味着t什么.

在二进制数据中,字符A 16不表示行的结尾,因此您将要使用该s标志,避免使用该m标志,并避免使用$.

此外,你会发现i标志和内置字符类(例如\d,\p{Letter}等)是无用的,除非你匹配解码文本的字符串(Unicode代码点的字符串),但你可以使用正则表达式引擎的任何功能.

  • 不会。Perl 的正则表达式引擎可以处理任意字符串。但这并不能成为需要形成正确的正则表达式(`s/\Q$binval\E/$newval/`)的借口。 (2认同)