gpt4 book ai didi

regex - 如何打印 Perl 字符类?

转载 作者:行者123 更新时间:2023-12-04 16:27:38 24 4
gpt4 key购买 nike

今天早上我在进行代码审查,遇到了一些错误的代码,但我不知道为什么。

$line =~ /^[1-C]/;

此行假设计算为 1 之间的十六进制字符和 C ,但我认为这条线不会那样做。问题不是匹配什么,而是匹配什么?我可以打印出字符类中的所有字符吗?像下面这样的?
say join(', ', [1-C]);

唉,
# Examples:
say join(', ', 1..9);
say join(', ', 'A'..'C');
say join(', ', 1..'C');

# Output
Argument "C" isn't numeric in range (or flop) at X:\developers\PERL\Test.pl line 33.

1, 2, 3, 4, 5, 6, 7, 8, 9
A, B, C

最佳答案

它匹配从 U+0030(“1”)到 U+0043(“C”)的每个代码点。

简单的答案是使用

map chr, ord("1")..ord("C")

代替
"1".."C"

正如您在以下演示中看到的:
$ perl -Mcharnames=:full -E'
say sprintf " %s U+%05X %s", chr($_), $_, charnames::viacode($_)
for ord("1")..ord("C");
'
1 U+00031 DIGIT ONE
2 U+00032 DIGIT TWO
3 U+00033 DIGIT THREE
4 U+00034 DIGIT FOUR
5 U+00035 DIGIT FIVE
6 U+00036 DIGIT SIX
7 U+00037 DIGIT SEVEN
8 U+00038 DIGIT EIGHT
9 U+00039 DIGIT NINE
: U+0003A COLON
; U+0003B SEMICOLON
< U+0003C LESS-THAN SIGN
= U+0003D EQUALS SIGN
> U+0003E GREATER-THAN SIGN
? U+0003F QUESTION MARK
@ U+00040 COMMERCIAL AT
A U+00041 LATIN CAPITAL LETTER A
B U+00042 LATIN CAPITAL LETTER B
C U+00043 LATIN CAPITAL LETTER C

如果您有 Unicode::Tussle安装后,您可以从以下 shell 命令获得相同的输出:
unichars -au '[1-C]'

您可能有兴趣浪费时间浏览 Unicode code charts . (此特定范围包含在“基本拉丁语 (ASCII)”中。)

关于regex - 如何打印 Perl 字符类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com