加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何打印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)”涵盖.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读