正则表达式 – 如何打印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)”涵盖.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |