私は次のような文字列を持っています
<?php
$string = Monday & SUNDAY 11:30 PM et/pt;
//or
$string = Monday 11:30 PM et/pt;
?>
どちらの場合も '11:30 PM' を取得したいので、explode を使用できないと思います。正規表現はどうなるでしょうか。前もって感謝します
12 時を有効に一致させるには、以下のような正規表現を使用します。12 時間制は 01:00 から 12:59 までです。
$regex = "#\b(?:0[0-9]|1[0-2]):[0-5][0-9] [AP]M\b#i";
元のアプローチに対するいくつかの修正については、以下のコメント投稿者に感謝しますが、まだ解決されていない問題がいくつかありました。
固定の 2 時間形式が必要な場合:(0[0-9]|1[0-2]):[0-5]\d [AP]M
マリク、事前に作成されたライブラリ正規表現を使用して時刻/日付を取得するには、次のクエリを検索してください: http://regexlib.com/Search.aspx?k=digit&c=5&m=-1&ps=20
基本的に、時間フィールドは似ています (区切り文字':'\d{1,2}:\d{2} [PA]M
が同じです) 。入力文字列で一致させるには、単純な正規表現をお勧めします。大文字と小文字を区別しないようにする場合は、 i、パターン修飾子を使用します。正規表現の基本については、こちらをお読みください。
PHP のこの一致関数を提供します ( 2 番目のスラッシュ (/) の後のiは、パターンの大文字と小文字を区別しません:am, AM, Am, aM
は等しくなります):
preg_match('/\d{1,2}:\d{2} [PA]M/i', $string, $time);
print ($time);
数字の後にスペースがない場合 (例: 午前 11 時 30 分)、または 1 つ以上のスペース文字がある場合、正規表現は次のようになります。
/\d{1,2}:\d{2}\s*[PA]M/i
このコードは午後 11 時 30 分になります。
preg_match('$([0-9:]{3,5}) ([AP])M$','Monday & SUNDAY 11:30 PM et/pt',$m);
echo $m['1']." ".$m['2']."M";