我有这个字符串:
$x = \x02 . 'raz' . \x02;
如何清理它以仅包含“raz”?
我试试这个:
$x =~ s/^[a-zA-z0-9,]//g;
但我会得到:
SCALAR0x560917295870razSCALAR0x560917295900
如何获得“raz”?
最佳答案
如果您有 "\x02"生成的 5 个字符的字符串。 '拉兹'。 “\x02”
,则以下内容将起作用:
$x =~ s/[^a-zA-z0-9,]//g;
注意我如何移动 ^
。
在字符类([...]
)之外,它表示“字符串的开头”(或使用 /m
时的“行的开头”) .
但作为字符类的第一个字符 ([^...]
),它会否定字符类。它将匹配除列出的字符之外的所有字符。
\x02 。 '拉兹'。另一方面,\x02
生成 SCALAR(0xXXX)razSCALAR(0xXXX)
形式的字符串。
$ perl -M5.010 -e'say \x02 . "raz" . \x02;'
SCALAR(0x565362191c08)razSCALAR(0x565362163750)
你可以使用
$x =~ s/SCALAR\([^()]*\)//g;
请注意,您应该始终使用use strict;使用警告;
。这本来可以避免导致垃圾产生的情况。
关于perl - 从 Perl 字符串中删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66174558/