2011-04-01 50 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

相关问题