为什么我的PHP preg_匹配第二个子模式而不是第一个子模式?
我的PHP代码是:为什么我的PHP preg_匹配第二个子模式而不是第一个子模式?,php,preg-match,Php,Preg Match,我的PHP代码是: $pattern = '/(Sun|Mon|Tue|Wed|Thu|Fri|Sat)(,| )[\d]{1,2}[A-Z]{1,1}[a-z]{2,2}/'; if (preg_match($pattern, $content, $matches, PREG_OFFSET_CAPTURE)){ $name = str_replace("(M1) ", "", substr($content, 0, $matches[0][1])
$pattern = '/(Sun|Mon|Tue|Wed|Thu|Fri|Sat)(,| )[\d]{1,2}[A-Z]{1,1}[a-z]{2,2}/';
if (preg_match($pattern, $content, $matches, PREG_OFFSET_CAPTURE)){
$name = str_replace("(M1) ", "", substr($content, 0, $matches[0][1]));
$date = substr($content, $matches[0][1], 15);
}
它可以与一个匹配子模式配合使用。例如:
B'Meadow Alarm Tue,17Sep 19:48 Ur001 General User Closing By User
name: B'Meadow Alarm
date: Tue,17Sep 19:48
B'Meadow Alarm Tue,9月17日19:48 Ur001一般用户关闭
名称:B'Meadow Alarm
日期:9月17日星期二19:48
我的字符串是:
(M1) B'Meadow Alarm Tue,17Sep 19:48 Ur001 General User Closing By User (M2) B'Meadow Alarm Tue,18Nov 09:18 Ur001 General User Closing By User
(M1)B’Meadow Alarm Tue,9月17日19:48 Ur001一般用户关闭用户(M2)B’Meadow Alarm Tue,11月18日09:18 Ur001一般用户关闭用户
它应该是:
name: B'Meadow Alarm
date: Tue,17Sep 19:48
名称:B'Meadow Alarm
日期:9月17日星期二19:48
但现实的结果是:
name: B'Meadow Alarm Tue,17Sep 19:48 Ur001 General User Closing By User (M2) B'Meadow Alarm
date: Tue,18Nov 09:18
名称:B'Meadow Alarm周二,9月17日19:48 Ur001一般用户按用户关闭(M2)B'Meadow Alarm
日期:11月18日星期二09:18
问题:我的模式出了什么问题?还是密码
------------
编辑
对不起,伙计们!我的一位同事将服务器存储库中的此正则表达式更改为以下正则表达式:“/(.*)(星期一星期二星期三星期四星期五星期六)(,)[\d]{1,2}[A-Z]{1,1}[A-Z]{2,2}(.*)/” 但他没有对git做出承诺。这就是为什么我无法在本地存储库中看到这些更改。
(*)导致问题。您的模式或代码都没有错误。您的代码输出与预期完全一致。您的意思是preg\u match\u all吗?因为preg_match不会返回嵌套数组,
$matches[0][1]
不会在那里。我得到了您的预期结果B'Meadow Alarm
和Tue,9月17日19:48
。您的代码也正常工作,PREG\u OFFSET\u CAPTURE
的值是多少?因为这可能是罪魁祸首代码没有问题,它应该显示您希望它显示的内容,@Bora谢谢!我还在这个问题上苦苦挣扎^_^这并没有回答OP的问题-所以应该是一个评论对不起!我的公司里有人碰了我的服务器存储库,从来没有跟我提起过!我只是使用我的本地存储库来调试!!!!!!!!!!!