2011-04-01 89 views
1

來源:如何使用正則表達式來替換這些單詞?

citys["bj"] = {bj:"Beijing"}; 
citys["han"] = {haikou:"Haikou",hainan:"Hainan",sanya:"Sanya",wzs:"Wuzhishan"}; 

要:

"bj" => array("bj"=>"Beijing"); 
"han" => array("haikou"=>"Haikou","hainan"=>"Hainan","sanya"=>"Sanya","wzs"=>"Wuzhishan"); 

謝謝!

+0

更新:我希望在一個一步一個正則表達式來解決這個問題。 – Cynial 2011-04-01 10:11:43

+0

你嘗試了一些東西,你可以發佈它嗎? – 2011-04-01 10:13:47

+0

任何理由用regex具體解決這個問題嗎? – zerkms 2011-04-01 10:18:54

回答

1

您可以分兩步解決這個問題:

$temp = preg_replace('/(\w*?):("\w*?")/', '"$1"=>$2', $input); 
$output = preg_replace('/citys\[("\w*?")\]\s*=\s*\{(.*?)\}/', '$1 => array($2)', $temp); 

首先您將所有haikou:"Haikou""haikou"=>"Haikou"。然後你變換citys["bj"] = {...};"bj" => array(...);

的正則表達式則是:

  1. (\w*?):("\w*?")
  2. citys\[("\w*?")\]\s*=\s*{(.*?)}
+0

這很好!是否有可能通過Regex一步解決這個問題?我認爲這是我想要的。我爲我可怕的表情感到抱歉。 – Cynial 2011-04-01 10:02:50

+0

那麼,你可以在一個正則表達式中使用遞歸正則表達式。 .Net中的Ruby或CaptureCollection。 – 2011-04-01 10:17:33

+0

欣賞你的病人。你的意思是不可能在PHP中使用遞歸正則表達式? – Cynial 2011-04-01 10:35:40

4
json_decode('{"bj":"Beijing"}', true); 

但對於此功能工作得很好,你需要有適當的JSON與鍵還帶有引號包圍。

+0

謝謝你的回答,但是我仍然希望使用正則表達式,因爲我發現在這種情況下我有一個正則表達式的一點不明白。 – Cynial 2011-04-01 09:06:34

+0

你剛纔說你想使用正則表達式,但不知道爲什麼?你有一個json編碼的字符串,只需使用json_decode即可。 – 2011-04-01 09:42:59

相關問題