Adeel Akram
Adeel Akram

Reputation: 390

Customize regular expression of php

i have a string which is something like

<?php
$string = Monday & SUNDAY 11:30 PM et/pt;
//or
$string = Monday 11:30 PM et/pt;
?>

i want to fetch '11:30 PM' in both the cases for which i guess i cant use explode so what will be the regular expression for this ,,,also please tell me something pretty nice to learn regular expressions. Thanks in advance

Upvotes: 0

Views: 178

Answers (4)

Igor Savinkin
Igor Savinkin

Reputation: 6277

Malik, to retrieve time/date you might use premade library regexes, search this query: http://regexlib.com/Search.aspx?k=digit&c=5&m=-1&ps=20

Basically your time fields are similar, (having the same delimiter ':' ), i'd recommend simple regex: \d{1,2}:\d{2} [PA]M to match in the input string. If you want make it case-insensitive use i, pattern modifier. For the basics of regex welcome to read here.

I give you this match function for PHP (i after second slash (/) makes pattern case-insensitive: am, AM, Am, aM will be equal):

  preg_match('/\d{1,2}:\d{2} [PA]M/i', $string, $time);
  print ($time); 

If there might not be a space after digits (ex. 11:30am) or more then one space char., then the regex should look like this: /\d{1,2}:\d{2}\s*[PA]M/i

Upvotes: 0

Kaii
Kaii

Reputation: 20540

to validly match a twelve-our-clock i'd use a regex like below. A twelve-hour-clock goes from 01:00 to 12:59:

$regex = "#\b(?:0[0-9]|1[0-2]):[0-5][0-9] [AP]M\b#i";

Upvotes: 1

MC_delta_T
MC_delta_T

Reputation: 616

this code will give you 11:30 PM

preg_match('$([0-9:]{3,5}) ([AP])M$','Monday & SUNDAY 11:30 PM et/pt',$m);
echo $m['1']." ".$m['2']."M";

Upvotes: -1

user1726343
user1726343

Reputation:

Credit goes to the commenters below for several fixes to the original approach, but there were still some unresolved issues.

If you want a fixed 2 hour format: (0[0-9]|1[0-2]):[0-5]\d [AP]M

Upvotes: 1

Related Questions