簡體   English   中英

從PHP中的JSON字符串中提取正則表達式

[英]Regular expression extraction from JSON string in PHP

我在PHP中有一個字符串,看起來可能類似於以下內容:

$string = '"["1000: Person One","1001: Person 2","1002: Person Three"]"';

它是從JSON數組生成的。 我需要編寫一個正則表達式以將JSON元素分離為一個PHP數組。 我只需要提取每個冒號之前的數字即可。 我嘗試了以下代碼,但沒有成功:

preg_match_all('/\"[^:]*:/',$string,$target_array); //No Success
preg_match_all(/\"\d*:/,$string,$target_array); //No Success

我需要的是一個正則表達式,它可以在":之間插入任何字符。

當然,如果一個人的名字碰巧包含一個相似的樣式,這將帶來問題。 我最好的辦法是將JSON數組解析為PHP數組。 因此,作為一種替代的(也是首選的)解決方案,一種將JSON數組解析為PHP數組的方法將非常壯觀。 我已經嘗試過對字符串進行json_decode了,但是它總是產生NULL

編輯:出於好奇,當我直接從輸出中復制字符串而不進行過濾和json_decode ,它將完美地轉換為PHP數組。

如果它是有效的JSON字符串,請嘗試以下方法(該解決方案比使用regexens更安全):

$string = '["1000: Person One","1001: Person 2","1002: Person Three"]';
$arr = json_decode($string);
$keys = array();
foreach ($arr as $value) {
  $keys[] = (int)current(explode(":", $value, 2));
}
print_r($keys); // $keys contains the numbers you want.

// output:
//  Array
// (
//    [0] => 1000
//    [1] => 1001
//    [2] => 1002
// )

在這里,看看這個: http : //codepad.viper-7.com/4JVAV8

正如喬納森·庫恩(Jonathan Kuhn)確認的那樣,json_decode可以正常工作。 但您也可以使用正則表達式:

$string = '["1000: Person One","1001: Person 2","1002: Person Three"]';
preg_match_all('/"(.*?):\s*([^"]+)"/', $string, $matches);
print_r($matches);

輸出

Array
(
    [0] => Array
        (
            [0] => "1000: Person One"
            [1] => "1001: Person 2"
            [2] => "1002: Person Three"
        )

    [1] => Array
        (
            [0] => 1000
            [1] => 1001
            [2] => 1002
        )

    [2] => Array
        (
            [0] => Person One
            [1] => Person 2
            [2] => Person Three
        )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM