正则表达式 – 如何打印Perl角色类?
发布时间:2020-12-13 21:53:22 所属栏目:百科 来源:网络整理
导读:我今天早上在代码审查中遇到了一些错误的代码,但我不明白为什么. $line =~ /^[1-C]/; 这一行被认为是评估1和C之间的十六进制字符,但我认为这一行不会这样做.问题不在于匹配,但这匹配的是什么?我可以打印出角色类中的所有角色吗?像下面的东西? say join(',
|
我今天早上在代码审查中遇到了一些错误的代码,但我不明白为什么.
$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:developersPERLTest.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)”涵盖.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
