开发者

Regex find time values

开发者 https://www.devze.com 2023-03-12 01:44 出处:网络
I keep getting into situations where I end up making two regular expressions to find sub开发者_运维技巧tle changes (such as one script for 0-9 and another for 10-99 because of the extra number)

I keep getting into situations where I end up making two regular expressions to find sub开发者_运维技巧tle changes (such as one script for 0-9 and another for 10-99 because of the extra number)

I usually use [0-9] to find strings with just one digit and then [0-9][0-9] to find strings with multiple digits, is there a better wildcard for this?

ex. what expression would I use to simultaneously find the strings 6:45 AM and 10:52 PM


You can specify repetition with curly braces. [0-9]{2,5} matches two to five digits. So you could use [0-9]{1,2} to match one or two.

[0-9]{1,2}:[0-9]{2} (AM|PM)

I personally prefer to use \d for digits, thus

\d{1,2}:\d{2} (AM|PM)


[0-9] 1 or 2 times followed by : followed by 2 [0-9]:

[0-9]{1,2}:[0-9]{2}\s(AM|PM)

or to be valid time:

(?:[1-9]|1[0-2]):[0-9]{2}\s(?:AM|PM)


If you are looking for a time patten, you'd do something like:

\d{1,2}:\d{1,2} (AM|PM)

Or for more specific time regex

[0-1]{0,1}[0-9]{1,2}:[0-5][0-9] (AM|PM)


Much like the other answers, except the AM/PM is not captured, which should be more efficient

\d{1,2}:\d{1,2}\s(?:AM|PM)


if I have a file containing:

1 ABC
2 123XYZ
3 6:45 AM
4 123DHD
5 ABC
6 10:52 PM
7 CDE

and run the following

$>grep -P '6:45\sAM|10:52\sPM' temp
6:45 AM
10:52 PM
$>.

should do the trick (-P is a perl regx)

EDIT:

Perhaps I misunderstood, the other answers are very good if I were looking to just find a time, but you seem to be after specific times. the others would match ANY time in HH:MM format.

overall, I believe the items you are after would be the | pipe character which is used in this case to allow alternative phrases and the {n,m} match n-m times {1,2} would match 1-2 times, etc.


It can be able to check all type of time formats :

e.g. 12:05PM, 3:19AM, 04:25PM, 23:52PM

my $time = "12:52AM";
if ($time =~ /^[01]?[0-9]\:[0-5][0-9](AM|PM)/) {
    print "Right Time Dude...";
}
else { print "Wrong time Dude"; }

This is the regex you want.

    /^[01]?[0-9]\:[0-5][0-9](AM|PM)/


Having this string as input:

Sat, 6 May 2017 02:08:08 +0000

I did this regEx to get combinations of one or two digits:

[0-9]*:[0-9]*:[0-9]*
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号