2011-08-31 108 views
1

我試圖對字符串使用preg_replace,但我得到了錯誤的結果。PHP的正則表達式問題

$string = "Da venerdì 26 agosto a lunedì 5 settembre 2011"; 
$string = preg_replace('/\p{L}+/s','',$string); 

應該返回 「26 5 2011」,但它返回 「¬26¬5 2011」

*注意 在Windows XP上我的本地PHP服務器一切工作正常 但在我的遠程PHP服務器上Debian它重新調整了我錯誤的字符串

你能幫我嗎?

+0

嘗試加入'i'標誌......在'¬之間只有一個分隔空間的列表'符號可能是一個大寫字母:-D – Teneff

+2

這看起來像你在你的輸入中有一個字符集問題(ì看起來像一個多字節字符,它顯示爲兩個不同的字符);使用UTF-8並在php.ini中設置'mbstring.func_overload = 7'以在PHP中使用多字節函數替換。 – feeela

回答

2

你想從我看到的字符串中提取數字。

  • 你的文字有一些編碼問題。那些字符應該是UTF8,但他們不知何故被搞砸了。也許你從DB獲得它們,而DB表不是UTF8?
  • 如果你想提取所有數字,那麼不要假設一個字符串只能由字母和數字組成。看看http://www.regular-expressions.info/unicode.html支持的字符類型
  • 使用preg_replace("/[\s]+/", ' ', preg_replace('/[^0-9\s]/',' ',$string));從字符串刪除任何非數字,並留下數