2017-08-10 109 views
1

我有一个正则表达式:故障使用的preg_replace选项

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) 

,对网页上的字符串(S)运行。一个可能的字符串示例:

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

这会更简单。但我不确定我会怎么做? – hunter21188

回答

1

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

$matches[2],然而,字符串数组,这样你就可以调用preg_replace把它当作第三个参数,并得到结果。

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

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