为什么输出“真实”

时间:2013-11-29 12:13:55

标签: regex perl regex-negation regex-lookarounds

为什么这个perl代码输出“True”?

$bar = "\\";
if ($bar =~ /[A-z]/){
  print "True";
} else {
  print "False";
}

它不应该返回假吗?

3 个答案:

答案 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]/;

检查Az之间的所有字符:

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]表示大写和小写