社区
Linux/Unix社区
帖子详情
正则表达式匹配数字范围?
Lena-Yang
2011-09-25 08:14:51
linux的正则表达式匹配数字,是[0-9]。可是我现在需要匹配一个范围,比如1-5、1-18等等,这个是不确定的,最大的那个数是根据ls的结果文件个数确定的。
最小的数确定是1.
最大的数length=${#array[@]},是一个数组的长度。。。
大家来帮忙!
...全文
13512
14
打赏
收藏
正则表达式匹配数字范围?
linux的正则表达式匹配数字,是[0-9]。可是我现在需要匹配一个范围,比如1-5、1-18等等,这个是不确定的,最大的那个数是根据ls的结果文件个数确定的。 最小的数确定是1. 最大的数length=${#array[@]},是一个数组的长度。。。 大家来帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
IterZebra
2011-09-30
打赏
举报
回复
[Quote=引用 12 楼 hardwin 的回复:]
试了下,还是不够完善。如果字符是数字开头,后面跟的是别的字符,这个正则也能通过。
还是把多分给你的,斑马童鞋。☺
同事帮我找到了比较完善的写法。丢出来跟大家分享。O(∩_∩)O~
这是写在我脚本里的,接收的参数就是咱们要验证的字符。
验证不通过返回1,否则返回0
number_match(){
if [[ $# = 0 ]];then
echo "Need ……
[/Quote]
额,加个结束符号就可以了。
Lena-Yang
2011-09-27
打赏
举报
回复
试了下,还是不够完善。如果字符是数字开头,后面跟的是别的字符,这个正则也能通过。
还是把多分给你的,斑马童鞋。☺
同事帮我找到了比较完善的写法。丢出来跟大家分享。O(∩_∩)O~
这是写在我脚本里的,接收的参数就是咱们要验证的字符。
验证不通过返回1,否则返回0
number_match(){
if [[ $# = 0 ]];then
echo "Need a parameter"
return 1
else
if [[ ! $1 =~ ^[0-9]+$ ]]
then
return 1
fi
return 0
fi
}
IterZebra
2011-09-26
打赏
举报
回复
那你匹配数字就可以了啊。
"[0-9]{1,}" 表示是1个以上的0-9的字符。
例如 0,01,05,078,0023,3333 都可以匹配上。如果输入的是这个匹配上的数字,那么你将这个变量与文件个数进行大小比较就可以了。
IterZebra
2011-09-26
打赏
举报
回复
搞半天你是想写个shell脚本,从标准输入输出终端读入一个数字啊。
Lena-Yang
2011-09-26
打赏
举报
回复
真实脚本是这样子:
[1] nbi_db
[2] mysql
[3] fwk
[4] test
Please input the number before database name.Otherwise,exit.Input:
假设文件个数为len
上面是通过ls找到的文件列表,前面是给的数字编号。接下来是提示用户input文件前面的数字来进行选择,
我需要判断用户输入的是数字,然后判断该数字>=1 && <=$len
因不知道匹配数字该怎么写,现在是曲线救国方式实现的。
Lena-Yang
2011-09-26
打赏
举报
回复
[Quote=引用 4 楼 mesh4444 的回复:]
LZ可能误会正则表达式了,正则表达式只能做字符串匹配,对数值比较无能为力……
至于LZ说的[0-9]并不是正则表达式匹配数字0-9,而是在字符编码里,0-9这十个字符是连续编码的,所以可以这么写,这和a-z是一个道理,没有谁大谁小的概念……
在正则表达式看来,18不是一个数字,而是一个字符1和一个字符8,正则表达式不知道18和19哪个大,只知道都是两个字符,所以正则表达式对数值比较毫无办法…………
[/Quote]
其实,我的这个需求,只用判断那个字符是数字就行了。而数字的范围,用条件语句去判断。
可是,linux里面只有[0-9],大于一位的数字就没法匹配了。JAVA里面是有对于数字的匹配规则。linux里面怎么匹配数字呢??
IterZebra
2011-09-26
打赏
举报
回复
[Quote=引用 2 楼 iterzebra 的回复:]
如果你实在想用正则表达式,你就这样吧:
比如要求 1-276,而且不能匹配高位补0的,比如027、01;不能匹配0;不能匹配大于276的。
那么正则可以是:
reg = "\\b[1-2](?<!2[8-9])[0-7](?<!27[7-9])[0-6]\\b|\\b[1-9][0-9]\\b|\\b[1-9]\\b";
解释一下:
\\b用来表示字的开始和结束。
第一种就是10……
[/Quote]
注意,这里的a应该改成max1,b改成max2,c改成max3。
写的时候没注意。
IterZebra
2011-09-26
打赏
举报
回复
[Quote=引用 10 楼 hardwin 的回复:]
引用 9 楼 iterzebra 的回复:
那你匹配数字就可以了啊。
"[0-9]{1,}" 表示是1个以上的0-9的字符。
例如 0,01,05,078,0023,3333 都可以匹配上。如果输入的是这个匹配上的数字,那么你将这个变量与文件个数进行大小比较就可以了。
这个靠谱。"[0-9]{1,}" 要写成这样"[0-9]\{1,\}"
好了☺
[/Quote]
好了就结贴给分哈~
Lena-Yang
2011-09-26
打赏
举报
回复
[Quote=引用 9 楼 iterzebra 的回复:]
那你匹配数字就可以了啊。
"[0-9]{1,}" 表示是1个以上的0-9的字符。
例如 0,01,05,078,0023,3333 都可以匹配上。如果输入的是这个匹配上的数字,那么你将这个变量与文件个数进行大小比较就可以了。
[/Quote]
这个靠谱。"[0-9]{1,}" 要写成这样"[0-9]\{1,\}"
好了☺
子谋
2011-09-25
打赏
举报
回复
LZ可能误会正则表达式了,正则表达式只能做字符串匹配,对数值比较无能为力……
至于LZ说的[0-9]并不是正则表达式匹配数字0-9,而是在字符编码里,0-9这十个字符是连续编码的,所以可以这么写,这和a-z是一个道理,没有谁大谁小的概念……
在正则表达式看来,18不是一个数字,而是一个字符1和一个字符8,正则表达式不知道18和19哪个大,只知道都是两个字符,所以正则表达式对数值比较毫无办法……
如果LZ想进行数值比较,还是换其他方法吧,正则表达式只认识字符,不认识数字……
IterZebra
2011-09-25
打赏
举报
回复
上述是Java代码,Linux的Shell实现,我就不帮你改了。
IterZebra
2011-09-25
打赏
举报
回复
如果你实在想用正则表达式,你就这样吧:
比如要求 1-276,而且不能匹配高位补0的,比如027、01;不能匹配0;不能匹配大于276的。
那么正则可以是:
reg = "\\b[1-2](?<!2[8-9])[0-7](?<!27[7-9])[0-6]\\b|\\b[1-9][0-9]\\b|\\b[1-9]\\b";
解释一下:
\\b用来表示字的开始和结束。
第一种就是100-276的;第二种就是10-99的;第三种就是1-9的。中间用“|"连接。
第一种的100-276写作"\\b[1-2](?<!2[8-9])[0-7](?<!27[7-9])[0-6]\\b"即 如果是2为首位,则不能是第二位为7以上,如果27为前两位,则第三位不能为6以上。
而因为你的最大数来自变量,因此必须知道这个变量的每个字符对应的位的值。
例如: int max为你所知道的最大值,而且你知道它是3位数。
String max1 = max.substring(0,1);
String max2 = max.substring(1,2);
String max3 = max.substring(2,3);
然后正则表达式写作:
String reg = "\\b[1-" +a+ "+](?<!" +a+ "[" +(b+1)+ "-9])[0-" +b+ "](?<!"+a+b+"+["+(c+1)+"-9])[0-"+c+"]\\b" +"|\\b[1-9][0-9]\\b|\\b[1-9]\\b";
IterZebra
2011-09-25
打赏
举报
回复
既然这个最大数字是不确定的,也就是只能是个变量。 这个就比较复杂了。我建议你利用正则表达式提取该值,进行判断是否满足要求。
java
正则表达式匹配
数字
范围
_在java中怎么利用
正则表达式匹配
数字
在java中怎么利用
正则表达式匹配
数字
发布时间:2020-12-03 17:47:12来源:亿速云阅读:58作者:Leah在java中怎么利用
正则表达式匹配
数字
?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想...
php 正则匹配
数字
范围
,
正则表达式匹配
数字
范围
正则表达式匹配
数字
范围
,匹配单个
数字
的方式很简单,[0-9]是[0123456789]的简写形式,可以用来匹配任何一个
数字
。如果要匹配 0 到 255 中的所有
数字
,该怎么办呢?表达式[0-255]并不能达到目的。下表所示为
数字
元...
linux正则匹配8位
数字
日期,正则表达式之匹配
数字
范围
,
正则表达式匹配
数字
正则表达式之匹配
数字
范围
,
正则表达式匹配
数字
最近有个需求就是根据产品编号批量下架产品,需要下架日期为16-31号之间的产品,比如编号为B201607280023匹配表达式如下:^201607(1[6-9]|2[0-9]|3[0-1]).+逻辑很简单,...
正则表达式匹配
规则
正则表达式匹配
规则限定符:?(0或1次)限定符:* (0或1次或多次)限定符:+ (1次或多次)限定符:{ } (指定次数)使用 () 实现多个字符的匹配或运算符:|[ ] 定义匹配的字符
范围
元字符 \d \D \w \W \s \S . \b^...
C/C++
正则表达式匹配
数字
范围
/小数点后几位
C++的正则表达式在regex头文件中,常用的表达式函数如下: basic_regex 正则表达式对象,是一个通用的... 寻找字符序列中的子串中与
正则表达式匹配
的结果,在找到第一个匹配的结果后就会停止查找 regex_replace .
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章