从 perl 字符串中去除特殊字符

Get rid of special characters from perl string

我有这个字符串:

$x = \x02 . 'raz' . \x02;

如何清理它以只留下“raz”?

我试试这个:

$x =~ s/^[a-zA-z0-9,]//g;

但我会得到:

SCALAR0x560917295870razSCALAR0x560917295900

如何获得“raz”?

如果您有 "\x02" . 'raz' . "\x02" 生成的 5 个字符的字符串,那么以下内容将起作用:

$x =~ s/[^a-zA-z0-9,]//g;

请注意我是如何移动 ^ 的。

在字符class([...])之外,表示“字符串的开始”(或使用/m时的“行的开始”)。

但是作为字符class([^...])的第一个字符,它否定字符class。它将匹配除列出的字符之外的所有字符。


另一方面,

\x02 . 'raz' . \x02 生成 SCALAR(0xXXX)razSCALAR(0xXXX).

形式的字符串
$ perl -M5.010 -e'say \x02 . "raz" . \x02;'
SCALAR(0x565362191c08)razSCALAR(0x565362163750)

你可以使用

$x =~ s/SCALAR\([^()]*\)//g;

请注意,您应该始终使用use strict; use warnings;。这样一来就避免了导致产生垃圾的情况。