【问题标题】:Why is output "True"为什么输出“真”
【发布时间】:2013-11-29 12:13:54
【问题描述】:

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

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

不应该返回false吗?

【问题讨论】:

  • false$bar =~ /[a-Z]/ 吗?
  • 在进行下一步之前,请花点时间查看perldoc.perl.org/perlrecharclass.html -- 尽可能使用字符类,最好是命名的;对于跟随你的人来说,它让事情变得更加容易。在这种情况下,[:alpha:] 可能就是你想要的。

标签: regex perl regex-negation regex-lookarounds


【解决方案1】:

因为 \ 在 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

使用以下命令查看 ASCII 图表:

man ascii

【讨论】:

  • 。 . .或者如果 OP 想要大写和小写,他应该尝试 [A-Za-z] 并且不包含多余的不需要的字符
  • +1 为什么我从来没想过要粘贴 ascii 表! :)
  • 这对你有用吗?如果是这样,你能用一个可爱的大绿色勾号接受我的回答吗?如果没有,请说出问题所在,以便我/其他人可以进一步帮助您。
【解决方案2】:
$bar =~ /[A-z]/;

不一样

$bar =~ /[A-Z]/;

检查Az 之间的所有字符:

perl -le 'print map chr, ord("A") .. ord("z")'

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

【讨论】:

    【解决方案3】:

    因为你写了[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] 用于大小写

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-28
      • 2015-12-07
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 2014-02-16
      相关资源
      最近更新 更多