Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Reg Ex匹配时间范围_Regex_Expression - Fatal编程技术网

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:345:3:55之间的每个日期,那么它需要分别匹配所有可能的数字:

/5:3:(3[4-9]|4[0-9]|5[0-5])/

不要在数学中使用正则表达式!您可以使用它们解析所有日期(例如,使用问题中包含的正则表达式),但随后使用解析后的值与给定的时间戳进行比较。这就像在词汇上比较数字

如果您确实需要一个正则表达式来匹配5:3:345: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修复了它。