Saya mempunyai banyak rentetan JSON yang cacat, seperti ini:
{ "id":23424938, "nama":aN, "ref":aN, "jul":aN, "kucing":{}, "src":[], "Kod":"SA", "jenis":d, "spesifikasi":[i,j], "kanak-kanak":a }
Saya cuba membina regex untuk menggandakan petikan nilai JSON tanpa kejayaan.
Saya akhirnya menggunakan
Bolehkah anda membantu saya dengan nilai dalam kurungan?
https://regex101.com/r/CGskmy/1
Tugas ini akan menjadi agak sukar kerana kekaburan. Contohnya,
{ "x": [y] }
是变成{ "x": "[y]" }
还是变成{ "x": ["y"] }
?我会假设未加引号的字符串不包含 JSON 控制字符,例如'[', ']', '{', '}', '"', ':', ','
.Saya rasa anda boleh mencapai ini menggunakan kumpulan penangkapan bernama, yang merupakan ciri dalam PHP yang mungkin menggunakan PCRE. Ini memerlukan beberapa pengaturcaraan untuk melaksanakan penggantian. Operasi
preg_replace
biasa tidak mencukupi kerana kami tidak menggantikan semua perlawanan.Ini adalah kaedah yang saya hasilkan. Mula-mula, saya memadankan rentetan yang dipetik dan mengabaikannya. Kedua, saya memadankan nombor dan mengabaikannya. Akhirnya, saya memadankan rentetan yang tidak disebut dan menyimpannya dalam kumpulan penangkap yang dipanggil "tidak disebut". Ambil perhatian bahawa PCRE akan cuba memadankan alternatif ini dalam susunan yang dipadankan. Rentetan tanpa petikan dipadankan hanya jika rentetan dan nombor yang dipetik tidak boleh dipadankan. Ini adalah kunci kepada pendekatan ini.
Setelah saya memadankan semua rentetan yang tidak disebut, ia hanya perlu menggabungkan rentetan keluaran dengan penggantian. Ini dilakukan dengan mengulangi padanan dan menyalin serpihan rentetan ke dalam output.