正则表达式匹配 int unint uint16 类型最大值最小值的类型范围

以int16来举例

答案

^([1-6]\d(?<!6[6-9])\d(?<!65[6-9])\d(?<!655[4-9])\d(?<!6553[6-9])|0|10{4}|[1-9]\d{0,3})$

解析

int16的范围是 0~65535 。我们把它分解为 0 1~9999 10000 ~ 65535 。前两组很简单如下

0
[1-9]\d{0,3}

正则表达式 否定式向后查看

(?<!exp2)exp1:查找前面不是 exp2 的 exp1

例子

(?<![0-9]+)runoob //匹配前面不是数字的 runoob字符串

字符串

123456runoob-googlerunoob456

将会匹配到 google后面的 runoob而不是 123456后面的runoob。
虽然参考网站里没有写,但是还可以这么写

exp1(?<!exp2) : 匹配exp1但是会去掉符合exp2的情况

例子

\d\d(?<!23) //匹配两个数字但是不会匹配 23 的情况

45匹配成功 23匹配失败
在这里插入图片描述
在这里插入图片描述

参考
第三组 : 第一个数字可以取 1-6,第二个数字可以取 0-9。但是第一个数字是 6,那么第二个数字就不能取 6-9(也就是只能取0-5)。第三个数字可以取0-9。但是如果第一个第二个数字正好是65,那么第三个数字就不能取6-9(也就是只能取0-5)。依次类推

[1-6]\d(?<!6[6-9]) //第一个数匹配 1-6,第二个数可以匹配 0-9,去除掉 第一个数为6的前提下第二个数为 6-9中的某一个数的情况。

完整表达式

[1-6]\d(?<!6[6-9])\d(?<!65[6-9])\d(?<!655[4-9])\d(?<!6553[6-9])

结尾

最后将它们组合起来,并添加上定位符

  1. 你要匹配的字符串只是由数字构成如
"12345"; "45";"65536";"65537" 等等

添加定位符

^([1-6]\d(?<!6[6-9])\d(?<!65[6-9])\d(?<!655[4-9])\d(?<!6553[6-9])|0|10{4}|[1-9]\d{0,3})$
  1. 你要匹配的字符串是字母加数字串等等
this is a number 65535 and 65536 and 456

添加定位符

\b([1-6]\d(?<!6[6-9])\d(?<!65[6-9])\d(?<!655[4-9])\d(?<!6553[6-9])|0|10{4}|[1-9]\d{0,3})\b

其它类型如法炮制即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值