2017-08-10 37 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去除字符串的所有字母。