从 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;
。这样一来就避免了导致产生垃圾的情况。
我有这个字符串:
$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;
。这样一来就避免了导致产生垃圾的情况。