2013-05-08 31 views
0

我正在使用PHP 5.2.17。我想從JSON字符串中刪除一些剩餘數據,我想我可以使用一些替換函數來實現。具體來說,我正在使用ereg_replace下一個表達式:php - ereg_replace中的有效regEx表達式不會產生任何效果

'^.*?(?=\"created_at)' 

我已經在http://www.regexpal.com驗證。我在那裏粘貼了我的JSON字符串,並且匹配是正確的。但是,當我撥打電話:

$tweets = eregi_replace('^.*?(?=\"created_at)', $temp, 'something'); 

然後我回顯$ tweets變量,有輸出。在控制檯中也沒有錯誤。但是,Apache錯誤日誌抱怨稱爲REG_BADRPT錯誤。在eregi_replace的php文檔中有一條評論,提示這可能是由於我需要轉義特殊字符,但我已經逃脫了「角色」,並且我試圖逃避其他人,但沒有任何不同的行爲。

Where可問題是呢?

+3

請不要在PHP中使用'ereg'函數;他們已被棄用。你應該使用'preg_replace()'來代替。 – Spudley 2013-05-08 14:41:16

+1

你真的應該使用'json_decode'並移除你不需要的數據,然後將其編碼回去。 – Twisted1919 2013-05-08 14:43:14

+1

'$ tweets = preg_replace('/^.*?(?= \「created_at)/',$ temp,'something');' – Ejaz 2013-05-08 14:43:20

回答

1

我不認爲ereg支持lookarounds。preg_replace存在於PHP 5.2,所以你應該使用來代替。它將與分隔符表達式工作。

$tweets = preg_replace('@^.*?(?=\"created_at)@i', 'something', $temp); 
+0

但是,請注意,preg_replace會改變參數的類型:它應該是' preg_replace('@ ^。*?(?= \「created_at)@i','something',$ temp);'。花了我整整一段時間才弄清楚,因爲這個提案不起作用了。 – 2013-05-08 16:34:00

+1

@JorgeAntonioDíaz-Benito固定問題;下次如果包含要測試的字符串,它將有所幫助。 – 2013-05-08 17:15:04

1

正如其他人所指出的那樣,ereg函數已被棄用,因此請使用preg_replace。你還必須用正斜槓(/)封裝正則表達式字符串。你可以把你的正則表達式標誌放在最後一個斜槓後面。

+0

雖然這不是所有提案之間解決方案最直接或最快捷的方式,但真正瞭解這些信息是非常值得讚賞的。 – 2013-05-08 16:31:14