1.1 普通字符组

字符组是正则表达式最基本的结构之一,字符组就是一组字符,在正则表达式中,它表示“在同一个位置可能出现的各种字符”。其写法是在一对方括号[.....]之间列出所有可能出现的字符。
     字符可以分为很多类,比如数字、字母、符号等。

简单的字符组如:

[0123456789]、[987654321]、[012345abc6789]

字符范围表示法:

所谓范围表示法,就是用[x-y]的形式表示x到y整个范围内的字符,省去一一列出的麻烦,[0123456789]就可以用[0-9]表示。

范围表示法的范围是如何确定的:

在字符组中“-”表示的范围一般是根据字符对应的码值来确定的,码值小的字符在前,码值大的字符在后。在ASCLL编码中(十进制),字符0的码值是48,字符9的码值是57,所以[0-9]等价于[0123456789];而[9-0]则是错误的范围,因为9的码值大于0的码值,所以会报错。

[0-9]范围表示法的例子:

<?php

$str = '05816516551';
preg_match_all('/[0-9]/', $str, $res);
echo "<pre>";
print_r( $res );

运行结果:

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 5
            [2] => 8
            [3] => 1
            [4] => 6
            [5] => 5
            [6] => 1
            [7] => 6
            [8] => 5
            [9] => 5
            [10] => 1
        )

)


[9-0]错误范围表示法的示例

<?php

$str = '05816516551';
preg_match_all('/[9-0]/', $str, $res);
echo "<pre>";
print_r( $res );
运行结果:

Warning: preg_match_all(): Compilation failed: range out of order in character class at offset 3 in F:\phpStudy\WWW\1.php on line 4


* [0-9]是合法的,[9-0]会报错:


如果你知道0-9的码值是48-57,a-z的码值是97-122,A-Z的码值是65-90,能不能用[0-z]同意表示数字字符、小写字母、大写字母呢?

答案是可以,但是不推荐这么做。

根据管理,字符组的范围表示法都表示一类字符(数字是一类)(字母是一类)。

[0-9]、[a-z]是很好理解的,但是[a-z]却很难理解,不熟悉ASCLL编码的人甚至不知道这个字符组还能匹配大写字母和不少标点符号。


奇怪的匹配示例:

<?php

preg_match_all('/[0-z]/', 'A', $res);
echo "<pre>";
print_r( $res );


运行结果:
Array
(
    [0] => Array
        (
            [0] => A
        )

)

可以看到[0-z]匹配大写字母A的时候居然也会成功匹配。


ASCLL编码表(片段)

码值字符码值字符码值字符码值字符码值字符
48063?78N93]108l
49164@79O94^109m
50265A80P95_110n
51366B81Q96`111o
52467C82R97a112p
53568D83S98b113q
54669E84T99c114r
55770F85U100d115s
56871G86V101e116t
57972H87W102f117u
58:73I88X103g118v
59;74J89Y104h119w
60<75K90Z105i120x
61=76L91[106j121y
62>77M92\107k122z


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值