0

preg_matchで使用されるこの種の文字列形式があります。

[Day][MonthAbbr] [Date] [Hour]:[Minutes][AM/PM]

example:
ThuDec 27 2:00am

この$patternとある種のコードがある:

$pattern = "/([A-Z]{2}\w+)([A-Z]{2}\w+)\s+(\w+)\s+(\d+):(\d+)(..)/ims";
$match = array();
if (preg_match($pattern, rtrim($date), $match)) {
    echo '<pre>';
        print_r($match);
    echo '</pre>';
} else {
    echo 'Could not parse date.';
}

文字列から月、日、時刻などを抽出することができました。

しかし、なぜ私はキャッチ「日付を解析できませんでした」を思いついたのか疑問に思いました。渡される値が同じであっても。

値とエラーのある値を比較しました。

ThuDec 27 2:00am
ThuDec 27  4:30am (gives the error)

比較するために、以下のスクリーンショットを示します。

ご覧のとおり、空の配列を返します。

preg_matchで使用されているパターンに何か問題がありますか?

4

1 に答える 1

1
<?php
$a = "ThuDec 27  4:30am";
$pattern = "/([a-z]{3})([a-z]{3})\s+(\d+)\s+(\d+):(\d+)([a-z]{2})/i";
$match = array();
if (preg_match($pattern, $a, $match)) {
    echo '<pre>';
        print_r($match);
    echo '</pre>';
} else {
    echo 'Could not parse date.';
}
?>

このコードは私にとってはうまく機能します。

于 2012-12-27T12:43:01.737 に答える