繁体   English   中英

添加第二个捕获组时,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"; 

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

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

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

这两个在外部站点上都可以正常工作,如正则表达式下面的链接所示

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

使用PHP 5.5.9

所以问题是,我是否在此正则表达式语句中丢失了某些东西,从而使它在外部站点和我的内部代码之间中断,或者该工作是否意味着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数组为空,但是该代码在第一个正则表达式示例中工作100%,因此两者之间存在某些问题。

您在此处还有一个额外的\\\\\\w+\\\\ ,是否有区别?

不太确定要返回什么,但是运行此正则表达式,其中$str是regex101链接中的文本,

$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
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM