Juste une question regex rapide ... espérons-PHP/Regex: JSON match à l'intérieur JSON
J'ai une chaîne qui ressemble à quelque chose comme ceci:
$string = 'some text [ something {"index":"{"index2":"value2"}"}] [something2 {"here to be":"more specific"}]';
Je veux être en mesure d'obtenir la valeur :
{"index":"{"index2":"value2"}"}
Mais mes tentatives de correspondance (ou remplacer) continuer à me donner:
{"index":"{"index2":"value2"}
preg_replace('/\[(.*?)({.*?[^}]})*?\]/is', "", $string);
Ici, je fais correspondre toute la zone de support carré, mais j'espère que vous pouvez voir ce que je suis en train de faire.
La négation du "ne correspond pas" ne semble pas faire quoi que ce soit. Peut-être que j'ai juste besoin d'un OU là ou quelque chose.
Eh bien, merci, si vous avez le temps de répondre. La chaîne $ pourrait contenir plusieurs instances du {}, donc une regex gourmande ne fonctionnera pas .... que je connais.
En général, l'appariement de quelque chose comme celui impliquant des délimiteurs ouverts/fermés appariés (accolades ou crochets) ne peut pas être effectué avec une expression régulière. Si vos chaînes ont d'autres délimiteurs fiables * autour du segment JSON, cela pourrait être possible. – Pointy
L'homme, ça craint. J'ai vu quelque chose qui disait cela sur un post pour C#. Si c'était toi, exploserais-tu et apparierais-tu à l'intérieur de chaque segment de tableau? Ou est-ce juste pas une bonne idée du tout? –
@Senica: Pourquoi ne pas analyser correctement le JSON avec une fonction d'analyse JSON, comme une personne sensée? C'est ce que ces fonctions _existent for_. C'est tout le but de tout le système JSON. –