2011-04-01 6 views
1

De:Comment utiliser regex pour remplacer ces mots?

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

Pour:

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

Merci!

+0

Mise à jour: J'espère résoudre ce en une seule étape par regex. – Cynial

+0

Avez-vous essayé quelque chose et pouvez-vous le poster? –

+0

Une raison de résoudre cela spécifiquement avec regex? – zerkms

Répondre

1

Vous pouvez résoudre ce en deux étapes:

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

D'abord, vous transformer tous haikou:"Haikou" en "haikou"=>"Haikou". Ensuite, vous transformez citys["bj"] = {...}; dans "bj" => array(...);

Les regexes puis sont:

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

C'est bon! Est-il possible de résoudre cela en une étape par Regex? Je pense que c'est ce que je veux. Je suis désolé pour mon expression horrible. – Cynial

+0

Eh bien, vous pouvez le faire dans une regex si vous utilisez des regexes récursives, par exemple. Ruby ou CaptureCollection dans .Net. –

+0

Appréciez votre patient. Voulez-vous dire qu'il n'est pas possible d'utiliser des regex récursifs en PHP? – Cynial

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

Mais pour cette fonction a bien fonctionné, vous devez avoir une bonne JSON, avec des touches aussi entourées de guillemets.

+0

Merci votre réponse, mais j'espère toujours utiliser Regex parce que j'ai trouvé qu'il y a un point de Regex dans ce cas je peux ne comprends pas. – Cynial

+0

Avez-vous juste dit que vous voulez utiliser une regex mais vous ne savez pas pourquoi? Vous avez une chaîne codée json, utilisez simplement json_decode. –