Regex Reg Ex匹配时间范围
我有一个按时间戳保存日志的日志文件。我要做的是在时间范围内读取某些值。例如,从文件开头和Regex Reg Ex匹配时间范围,regex,expression,Regex,Expression,我有一个按时间戳保存日志的日志文件。我要做的是在时间范围内读取某些值。例如,从文件开头和5:3:55。我对正则表达式不太在行,我想知道如何编写表达式来读取它。到目前为止,我得到了以下不正确的表达。有什么样的例子吗?如何正确书写?谢谢 ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 有范围解决方案的帖子不适合我的需要,因为它需要花费大量的时间和处理文件。虽然我需要从文件开始的时间戳比一定的增量比一定的字匹配。谢谢不要在数学中使用正则表达式!您可以使用它们解析所有日
5:3:55
。我对正则表达式不太在行,我想知道如何编写表达式来读取它。到目前为止,我得到了以下不正确的表达。有什么样的例子吗?如何正确书写?谢谢
([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
有范围解决方案的帖子不适合我的需要,因为它需要花费大量的时间和处理文件。虽然我需要从文件开始的时间戳比一定的增量比一定的字匹配。谢谢不要在数学中使用正则表达式!您可以使用它们解析所有日期(例如,使用问题中包含的正则表达式),但随后使用解析后的值与给定的时间戳进行比较。这就像在词汇上比较数字 如果您确实需要一个正则表达式来匹配5:3:34和5:3:55之间的每个日期,那么它需要分别匹配所有可能的数字:
/5:3:(3[4-9]|4[0-9]|5[0-5])/
不要在数学中使用正则表达式!您可以使用它们解析所有日期(例如,使用问题中包含的正则表达式),但随后使用解析后的值与给定的时间戳进行比较。这就像在词汇上比较数字 如果您确实需要一个正则表达式来匹配5:3:34和5:3:55之间的每个日期,那么它需要分别匹配所有可能的数字:
/5:3:(3[4-9]|4[0-9]|5[0-5])/
您需要的不仅仅是一个正则表达式(至少要做出一个合理的解决方案)。下面是一个示例程序,它用Perl演示了一个简单的解决方案:
use warnings;
use strict;
my $time_min = '08:19:48';
my $time_max = '12:30:48';
while (1)
{
print "enter time: ";
chomp($_ = <STDIN>);
if (time_numeric($_) <= time_numeric($time_max) and
time_numeric($_) >= time_numeric($time_min))
{
print "$_ is between $time_min and $time_max\n";
}
else
{
print "$_ ain't between $time_min and $time_max\n";
}
}
sub time_numeric
{
if ($_[0] =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
{
return ($3 + $2 * 100 + $1 * 10000);
}
else
{
die "Invalid time!";
}
}
使用警告;
严格使用;
我的$time_min='08:19:48';
我的$time_max='12:30:48';
而(1)
{
打印“输入时间:”;
咀嚼($);
如果(时间数值($)=时间数值($时间分钟))
{
打印“$在$time\u min和$time\u max之间\n”;
}
其他的
{
打印“$不在$time\u min和$time\u max之间\n”;
}
}
子时间单位
{
如果(${0]=~/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
{
回报($3+2*100+1*10000);
}
其他的
{
死“无效时间!”;
}
}
它不需要验证时间,只需假设输入是实时的。它也只适用于24小时时间戳
无论输入字段中是否有前导零,它都可以处理输入
如果您在Perl中工作,也可以考虑使用一个模块,如<代码> Time:Tabe< /Cult>, 您需要的不仅仅是一个正则表达式(至少要做出一个合理的解决方案)。下面是一个示例程序,它用Perl演示了一个简单的解决方案:
use warnings;
use strict;
my $time_min = '08:19:48';
my $time_max = '12:30:48';
while (1)
{
print "enter time: ";
chomp($_ = <STDIN>);
if (time_numeric($_) <= time_numeric($time_max) and
time_numeric($_) >= time_numeric($time_min))
{
print "$_ is between $time_min and $time_max\n";
}
else
{
print "$_ ain't between $time_min and $time_max\n";
}
}
sub time_numeric
{
if ($_[0] =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
{
return ($3 + $2 * 100 + $1 * 10000);
}
else
{
die "Invalid time!";
}
}
使用警告;
严格使用;
我的$time_min='08:19:48';
我的$time_max='12:30:48';
而(1)
{
打印“输入时间:”;
咀嚼($);
如果(时间数值($)=时间数值($时间分钟))
{
打印“$在$time\u min和$time\u max之间\n”;
}
其他的
{
打印“$不在$time\u min和$time\u max之间\n”;
}
}
子时间单位
{
如果(${0]=~/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
{
回报($3+2*100+1*10000);
}
其他的
{
死“无效时间!”;
}
}
它不需要验证时间,只需假设输入是实时的。它也只适用于24小时时间戳
无论输入字段中是否有前导零,它都可以处理输入
如果您在Perl中工作,也可以考虑使用一个模块,如<代码> Time:Tabe< /Cult>, 不,正则表达式只是用于此目的的错误工具。试着在没有他们的情况下解决它。顺便说一句,上面的正则表达式是从哪里来的,它似乎与你的问题无关?只是几秒钟的时间吗?这个正则表达式匹配
0:0:0
,00:00
,23:59:59
等。你的要求是什么?你使用任何编程语言来实现这一点吗?如果是,哪一个?也许比较时间戳的最小值和最大值会更容易。不,正则表达式只是不适合这样做。试着在没有他们的情况下解决它。顺便说一句,上面的正则表达式是从哪里来的,它似乎与你的问题无关?只是几秒钟的时间吗?这个正则表达式匹配0:0:0
,00:00
,23:59:59
等。你的要求是什么?你使用任何编程语言来实现这一点吗?如果是,哪一个?也许比较时间戳的最小值和最大值会更容易。不会匹配5:3:50
?哎呀,多亏@NaveedS修复了它。不会匹配5:3:50
?哎呀,多亏@NaveedS修复了它。