在字符串中匹配日期

时间:2018-04-04 17:54:15

标签: php regex

让difficuties与给定字符串中的日期匹配。尝试了无数的正则表达式建议。继续获取"没有找到日期",而日期显然在那里:07/02/2016。

我错过了什么?

function matchDate($str) {
    if (preg_match('/\b(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}\b/', $str, $mDdate)) {
        return $mDdate[0];
    } else {
        return "No date found.";
    }
}

$str = "FISH HOUSE KINGS FISH HOUSE 100 W Broadway Long Beach, Ca. 90802 562-432-7463 Server: Ezbeth 07/02/2016 Table 44/1 8:38 PM 60018 10.00 18.75 enon Drop Fried atiish D I obster Crunchy Roll callap and Shrimp Char D 13.50 22.50 6.95 101.60 Cheeseburger 1/2lb D (2 14.95) 29.90 Caesar Salad Subtotal Tax 9.14 110.74 110.74 Total Ba 1ance Due KING'S FISH HOUSE Welcome To The House That Seafood Built Find Us Online @KingsFishHouse ";

echo matchDate($str);

2 个答案:

答案 0 :(得分:3)

对于您给出的示例,这是

\b\d{2}/\d{2}/\d{4}\b

请参阅a demo on regex101.com

答案 1 :(得分:2)

示例正则表达式的问题在于您需要转义模式中的/字符。

如果你没有转义/字符,正则表达式会将其理解为正则表达式模式的结尾。

根据您的示例,解决方案应该是: \b(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/(19|20)?[0-9]{2}\b

您可以在this demo

中看到它的实际效果