求一时间的正则表达式: 如09:43:09-9:43:10,12:00:01-13:01:34

2026-01-11 06:56:09
推荐回答(3个)
回答1:

:^0[1-9]$ 如果第一位是0,则后面必须不为0
1.2:^[1-9][0-9]?$ 如果第一位不是0,则后面则任意
2.看包含小数点时
2.1 整数部分全为0
2.1.1:^00?\.0[1-9]$ 如果整数部分全部为0,小数第一位为0,则小数第二位就一定不为0
2.1.2:^00?\.[1-9][0-9]?$ 如果整数部分全部为0,小数第一位不为0,则第二位任意
结合2.1起来:^00?\.(?:0[1-9]|[1-9][0-9]?)$
2.1 整数部分不全为0
2.2.1:^0[1-9]\.[0-9]$ 如果整数部分第一位是0,第二位不为0,则小数部分任意
2.2.2:^[1-9][0-9]?\.[0-9]$ 如果整数部分第一位不为0,第二位任意,则小数部分任意
结合2.2起来:^(?:0[1-9]|[1-9][0-9]?)\.[0-9]$
全部就是:
^0[1-9]$|^[1-9][0-9]?$|^00?\.(?:0[1-9]|[1-9][0-9]?)$|^(?:0[1-9]|[1-9][0-9]?)\.[0-9]$
看起来是不是头晕,
判断具体的有限制的浮点数,有更多容易的方法,例如用你所熟悉的脚本语言,js,asp,vbs,php等等
if(小数点是否存在)
{//小数点存在
if(当整数部分"数值"大于0)
{
只用判断小数部分是二位,满足条件返回
}
else
{
整数数值等于0,只用判断小数"数值"大于0且位数小于2,满足条件返回
}
else{
小数点不存在,就是正整数,只用判断"数值"大于0且位数小于2,,满足条件返回
}
正则用来匹配字符很容易,但是这里直接用数值来判断比正则容易的多..
如果我分析有错误的地方,请指正

回答2:

你是要获取时间呢,还是时间段呢?
不过显然你已经能做到单个时间的捕获了,虽然细节稍有错误(纠正见下)。
捕获一个时间段就是把你的串重复一遍,中间加上分隔符-。
捕获多个时间段,按照意图,可分为两种:
1、逐一获取各个时间段,这只要程序加个循环,匹配一次,收集一个结果,直到无法再次匹配就行了。
2、将一连串时间段捕获成一个长串,越长越好,则正则表达式如下:
((0?[0-9]|1[0-9]|2[0-3]):([1-5][0-9]|0?[0-9]):([1-5][0-9]|0?[0-9])-(0?[0-9]|1[0-9]|2[0-3]):([1-5][0-9]|0?[0-9]):([1-5][0-9]|0?[0-9]),?)+
特别注意:关于秒的匹配,发现(0?[0-9]|[1-5][0-9])有些问题,最后一个数字有时匹配不到,而颠倒一下顺序,写成([1-5][0-9]|0?[0-9])就正确,原因一时分析不出来。

回答3:

JS:
var reg=/(0\d|1\d|2[0-3]|[1-9]):(0\d|[1-5]\d|[1-9]):(0\d|[1-5]\d|[1-9])-(0\d|1\d|2[0-3]|[1-9]):(0\d|[1-5]\d|[1-9]):(0\d|[1-5]\d|[1-9])/gm
var s='09:43:09-9:43:10,12:00:01-13:01:34,15:30:1-25:9:1'
while((v=reg.exec(s))!=null){
WScript.echo(v[0])
}