【发布时间】:2014-08-15 15:15:43
【问题描述】:
我有以下命名的捕获组,它完全按照预期工作。它从文本字符串中获取特定格式的最后日期/时间。
$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 匹配数组为空。一旦正则表达式更改为第二个值,print_r 确认数组不包含任何信息。
正如下面的 Regex101 链接所示,这两种方法在外部站点中都可以正常工作
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% 一起工作,因此两者之间存在导致问题的原因。
【问题讨论】:
-
您能否提供更广泛的代码快照?我想错误不在正则表达式中,而是在周围的代码中(例如,使用未初始化“日期”键的数组 $array['date'])。
-
您得到的通知是 $LastDateMatches['date'] 中的 'date' 键未初始化。
-
代码工作正常,就像第一个正则表达式值一样。密钥在预赛期间被初始化,并在代码中稍后被拉出......我遇到的唯一问题是给出的第二个正则表达式示例阻止了它的工作。如果代码与第一个一起工作正常,它应该继续与第二个一起工作,除非我以某种方式弄乱了正则表达式或命名捕获组有一些限制
-
你能贴出从最后一个日期/时间开始到下一个单词结束的子字符串吗?
-
提供的 Regex 101 链接有一个我传递给代码的字符串的扩展示例。