PHP正则表达式语句

PHP正则表达式语句,php,regex,Php,Regex,通过post请求,我正在尝试将预订号码返回到我的iOS应用程序。它以字符串形式发布当前日期,并将其写入我的服务器上的文件。 逻辑是,只要最后一个条目的日期与post请求中传递的日期不匹配,预订号就从01开始。如果是同一天,预订数量将增加1 我将条目写入的文本文件如下所示: 2017-03-03, 1; 2017-03-03, 2; 2017-03-03, 3; 2017-03-03, 4; 2017-03-03, 5 我使用regex查找最后一个条目,将其日期与当前日期进行比较,并分配新的预订

通过post请求,我正在尝试将预订号码返回到我的iOS应用程序。它以字符串形式发布当前日期,并将其写入我的服务器上的文件。
逻辑是,只要最后一个条目的日期与post请求中传递的日期不匹配,预订号就从
01
开始。如果是同一天,预订数量将增加1

我将条目写入的文本文件如下所示:

2017-03-03, 1;
2017-03-03, 2;
2017-03-03, 3;
2017-03-03, 4;
2017-03-03, 5
我使用regex查找最后一个条目,将其日期与当前日期进行比较,并分配新的预订号。 这是我的密码:

if (preg_match_all("/\d{4}-\d{1,2}-\d{1,2},\s\d\z/", $textFileString, $entryArray)) {
    if (preg_match_all("/\d{4}-\d{1,2}-\d{1,2}/", $entryArray[0][0], $dateArray)) {
        if ($dateArray[0][0] == $currentDate) { //$currentDate's value comes from the post request
            if (preg_match_all("/\d\z/", $entry[0][0], $numberArray)) {
                $bookingNumber = $output_array[0][0]+1;
            }
        } else {
            $bookingNumber = 1;
        }
    }
}

注意:我确实成功写入了该文件。

我建议切换到
preg_match
(因为您只需要找到一个匹配项),并将捕获组添加到模式中,以便稍微减少代码:

$textFileString = '2017-03-03, 1;
2017-03-03, 2;
2017-03-03, 3;
2017-03-03, 4;
2017-03-03, 5';
$currentDate = '2017-03-03';
if (preg_match("/(\d{4}-\d{1,2}-\d{1,2}),\s(\d{1,2})\z/", $textFileString, $entryArray)) {
    if ($entryArray[1] == $currentDate) { //$currentDate's value comes from the post request
        $bookingNumber = $entryArray[2]+1;
    } else {
        $bookingNumber = 1;
    }

}
echo $bookingNumber;

注意:您也可以将
\z
替换为
$
,因为默认情况下,
$
锚点在字符串末尾(或字符串中最后一个LF之前)匹配


现在,
(\d{4}-\d{1,2}-\d{1,2}),\s(\d{1,2})\z
包含两个捕获组,您可以通过
$entryArray[1]
$entryArray[2]
访问它们。那么什么不起作用呢?如果您对单个匹配感兴趣,为什么要使用
preg\u match\u all
?使用
preg\u match
。另外,
\z
匹配字符串的末尾,如果有尾随的换行符呢?更改为
$
。当我从应用程序内的json响应中读取bookingNumber时,我会在这些正则表达式之前获得分配给
$bookingNumber
的值statements@WiktorStribiżew我正在尝试读取最新的条目,它显然位于字符串的最末尾。这里的
$currentDate
值是多少<代码>2017-03-02?