麻烦使用preg_replace选项

时间:2017-08-10 17:20:57

标签: php regex

我有正则表达式:

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”。知道为什么它没有像我期望的那样打印出整个组吗?

1 个答案:

答案 0 :(得分:1)

preg_match_all使用数组数组填充$matches变量。 preg_replace的第三个参数应该是字符串或字符串数​​组,因此这可能是您遇到问题的地方。

$matches[2]但是, 是一个字符串数组,因此您可以调用preg_replace将其作为第三个参数传递并获得结果。

$matches[2] = preg_replace('/([A-Z]{3})/','',$matches[2]);

如果您想要更通用的字母替换正则表达式,可以使用/[A-Z]/i删除字符串中的所有字母。