[英]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.