我有正则表达式:
preg_match_all('#^(((?:-?>?(?:[A-Z]{3})?\d{3})+)-([0-9]{2})([0-9]{2})([0-9]{2})-\n\/O.([A-Z]{3}).KCLE.([A-Z]{2}).([A-Z]).([0-9]{4}).[0-9]{6}T[0-9]{4}Z-([0-9]{2})([0-9]{4}T[0-9]{4}Z[\/]))#', '', $matches)
针对网页上的字符串运行。可能的字符串示例:
OHZ012>018-PAZ015-060815-
/O.EXP.KCLE.BH.S.0015.000000T0000Z-170806T0700Z/
这将正确匹配字符串。但是,对于$matches[2]
,它将输出
OHZ012> 018-PAZ015
我希望此行读取:012> 018-015(即删除该组中的字母)。
我使用preg_replace尝试了以下内容:
$matches = preg_replace('/([A-Z]{3})/','',$matches);
现在,如果我打印出$matches[2]
,它只会给我第3个字符而不是组。因此,例如,它将打印出“2”而不是“012> 018-015”。知道为什么它没有像我期望的那样打印出整个组吗?
答案 0 :(得分:1)
preg_match_all
使用数组数组填充$matches
变量。 preg_replace
的第三个参数应该是字符串或字符串数组,因此这可能是您遇到问题的地方。
$matches[2]
但是, 是一个字符串数组,因此您可以调用preg_replace
将其作为第三个参数传递并获得结果。
$matches[2] = preg_replace('/([A-Z]{3})/','',$matches[2]);
如果您想要更通用的字母替换正则表达式,可以使用/[A-Z]/i
删除字符串中的所有字母。