添加第二个捕获组时PHP Regex搜索失败


PHP Regex search failing when adding a second capture group

我有以下命名的捕获组,它完全按照预期工作。它从文本字符串中获取特定格式的最后日期/时间。

$re = "/.*(?<date>[0-9]+''/[0-9]+''/[0-9]+ [0-9]+:[0-9]+:[0-9]{1,2} (AM|PM))/s";

我想捕获后面的用户ID所以我把它改成了下面的

$re = "/.*(?<date>[0-9]+''/[0-9]+''/[0-9]+ [0-9]+:[0-9]+:[0-9]{1,2} (AM|PM)) (?<name>''w+)/s"; 

但是,当我这样做时,它会破坏两个值,给出以下错误

注意:未定义的索引:日期在Q:'XAMPP'htdocs'index.php第272行

错误源于preg_match匹配数组为空。Print_r在将正则表达式更改为第二个值后确认该数组不包含任何信息。

这两种方法在外部站点中都可以正常工作,如下面的Regex101链接所示

http://regex101.com/r/zO0mK0/4

使用PHP 5.5.9

所以问题是,我是否在这个regex语句中错过了一些东西,这些东西在外部网站和我的内部代码之间打破了它,或者这个工作意味着它100%纯粹是我的php导致这个问题。

    $LastDateRegex = "/.*(?<date>[0-9]+''/[0-9]+''/[0-9]+ [0-9]+:[0-9]+:[0-9]{1,2} (AM|PM))/s";  
    preg_match($LastDateRegex, $arr2['WorkLog'], $LastDateMatches);
    $Modsecs = (strtotime($ts) - strtotime($LastDateMatches['date']))%60;

这是正在使用的代码的示例。如上所述,我知道错误源于$LastDateMatches数组为空的第二个regex示例,但是代码与第一个100%工作,因此两者之间存在导致问题的东西。

这里有一个额外的': ''w+''在一些地方,如果这有区别吗?

不太确定您想要返回什么,但运行此正则表达式,其中$str是您在regex101-link中拥有的文本,

$regex = "/.*(?<date>'d+'/'d+'/'d+ 'd+:'d+:'d{1,2} (?:AM|PM)) (?<name>'w+)/s";
preg_match($regex, $str, $LastDateMatches);

输出,

Array
(
    [0] => ...
    [date] => 6/20/2014 10:04:32 PM
    [1] => 6/20/2014 10:04:32 PM
    [name] => ihugett
    [2] => ihugett
)