2016-12-16 84 views
0

給定以下字符串(是,STRING,不是數組),我想在國家名稱周圍添加雙引號。如何在單詞或短語與單詞之間添加雙引號?

$string = "Array ([0] => Array ([nicename] => Afghanistan [phonecode] => 93) [1] => Array ([nicename] => United States [phonecode] => 1)";

我想下面的字符串:

Array ([0] => Array ([nicename] => "Afghanistan" [phonecode] => 93) [1] => Array ([nicename] => "United States" [phonecode] => 1) 

我怎麼能這樣做?

注意:這個字符串只顯示兩個國家,但實際數據將有超過一百個縣。

我的想法做一些像

$string = preg_replace("/[[:alpha:]]/", "/\"[[:alpha:]]\"/", $string); 

,但問題是,對於第二個參數,(1)如何將PHP知道是什麼字符類[[:alpha:]]是和(2)國家的名字除字母字符外可能還包含空格。

+1

爲什麼是你的字符串數組?在任何情況下,找到的匹配都將在它們的反向引用'$ 0'中,用於您在此列出的內容。正則表達式/字符類不會進入第二個參數。 – chris85

+0

@ chris85我在數據庫中有一個表,其中包含countryName,countryCode,countryShortName,callingCode等數據。我只需要countryName和callingCode。所以我寫了一個小程序從數據庫中讀取這兩列並打印出來。第一個字符串是打印出來的。現在在我的真實項目中,我需要對此數組進行硬編碼(無法從數據庫或其他資源中讀取數據)。所以我想打印一個字符串,我可以簡單地複製並粘貼我的代碼並分配給一個變量。哈克和骯髒的,但很好告訴我,如果你知道更好的方法。 – Sie

+1

它已經是一個有組織的格式,爲什麼你不能使用它? – chris85

回答

-1

在這裏你去:

$string = preg_replace('/(\[nicename\] =>) ([a-zA-Z ]+) \[/', '$1 "$2" [', $string); 
+2

答案應該有解釋。 – chris85

0

你確實應該這樣做,其中陣列建立,但它可以用正則表達式來完成...

您需要nicename後,捕捉一切,直到[)(例如,如果nicename位於「陣列」的末端或中間)。

使用類似:

(\[nicename\] =>)([^\[)]+) 

要做到這一點,那麼你需要引用找到的國家名稱:

$1"$2" 

演示:https://regex101.com/r/7TeUQu/1

這有國後多餘的空格因爲空白被允許在那裏。在PHP中,我們需要使用preg_replace_callback和trim函數來解決這個問題。

$regex = '/(\[nicename\] =>)([^\[)]+)/'; 
$replace = '$1"$2" '; 
$string = 'Array ([0] => Array ([nicename] => Afghanistan [phonecode] => 93) [1] => Array ([nicename] => United States [phonecode] => 1)'; 
$string = preg_replace_callback($regex, function($match) { 
    return $match[1] . '"' . trim($match[2]) . '" '; 
}, $string); 
echo $string; 

PHP演示:https://eval.in/699678

相關問題