2012-02-03 27 views
0

我有一些數據,看起來像:如何使用正則表達式從字符串中返回單詞?

{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";} 

我需要刪除引號,例如內所有項目69,70,..,77

我明白我應該使用preg_split函數。

我正在尋找正確表達式的幫助,我需要傳遞給preg_split以返回所需的數據。

編輯

對不起,我最初的問題是不明確的。我想收集語音標記之間的所有值,並讓他們在返回數組(我不感興趣,在保持數據的其餘部分 - 所有我需要是語音標記中的值)

編輯2 的數據是一個序列化的對象,我沒有包含完整的對象以節省空間。

+6

這看起來像由[serialize函數]產生的數據(http://de2.php.net/manual/en/function.serialize.php)。使用此函數將其轉換爲數組,將其編輯並將其轉換回來更容易嗎? – 2012-02-03 18:01:30

+1

給我們一個結果的例子。 – Vyktor 2012-02-03 18:04:33

+0

我同意Max ...你將不得不在字符串的開頭添加'a:NUMBER_OF_ELEMENTS' ... – prodigitalson 2012-02-03 18:07:07

回答

2

沒有正則表達式:

$v = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}'; 
$v = unserialize($v); 
print_r($v); 
$v = array_combine(array_keys($v), array_fill(0, count($v), '')); 
echo serialize($v); 

但這看起來,如何最大提到,像序列化對象(的一部分)。
你應該檢查,如果你能與它的完整語法工作...

更新

好,如果你只是想這個序列化數組的值,它會變得更加容易:

$v = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}'; 
$v = unserialize($v); 
$v = array_values($v); 
print_r($v); 

輸出:

Array 
(
    [0] => 69 
    [1] => 70 
    [2] => 71 
    [3] => 72 
    [4] => 73 
    [5] => 74 
    [6] => 75 
    [7] => 76 
    [8] => 77 
) 

array_values()不甚至有必要,真的。

1

如果你真的要刪除引號之間的所有號碼,只需使用

$string = preg_replace('/"[0-9]+"/', '""', $string); 

如果你想刪除這些之間的一切,用

$string = preg_replace('/"[^"]+"/', '""', $string); 

爲您編輯的問題:

preg_match_all('/"([^"]+)"/', $string, $matches); 

$ matches將包含一個包含字符串的數組數組。

0

像這樣的東西應該工作:

$str = '{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}'; 
$str = preg_replace('#:"[^"]*"#', '', $str); 
echo $str . "\n"; 
+0

應該指出,這個表達式也刪除了前面的冒號。所以:2:「71」;'成爲:2;'。這可能是提問者想要的,但這不是他們所說的。 – 2012-02-03 18:23:35

+0

@MattH。好點,但是最初我沒有抓住':',而字符串是用':;'留下的,這對我來說並不合適,所以我很少自由地在正則表達式中包含':'。 – anubhava 2012-02-03 18:26:21

0

這將是更加有用的

$data = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}'; 
$data = unserialize($data); 
echo implode(',',$data); 
相關問題