为什么这个perl代码输出“True”?
$bar = "\\";
if ($bar =~ /[A-z]/){
print "True";
} else {
print "False";
}
它不应该返回假吗?
答案 0 :(得分:20)
因为\介于A-z之间。见下表,92介于65和122之间。尝试[A-Z]。
0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel
8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si
16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb
24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us
32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 '
40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 /
48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7
56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ?
64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G
72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O
80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W
88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _
96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g
104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o
112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w
120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del
答案 1 :(得分:6)
$bar =~ /[A-z]/;
与
不同$bar =~ /[A-Z]/;
检查A
和z
之间的所有字符:
perl -le 'print map chr, ord("A") .. ord("z")'
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
答案 2 :(得分:0)
因为你写了[A-z]
:
请参阅:http://perldoc.perl.org/perlrecharclass.html
[a-z] # Matches a character that is a lower case ASCII letter.
尝试[A-Z]
表示大写,或[a-zA-Z]
表示大写和小写