我有以下命名的捕获组,它完全按照预期工作。它从文本字符串中获取特定格式的最后日期/时间。
$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
)