2016-05-16 12 views
0

私は削除する必要があります" - 無効なjsonを作成する、どうすればphp正規表現でやりますか?php regex "-s from string

"名前":四auの "ステーキ """、このような状況の削除で

"4つの" -s」のauは、これは、2つの引用符に一致するようにPHPのコードである

+0

私はあなたの質問をフォーマットして、より読みやすくしました。すでに試したコードがありますか?あなたの質問の下にある編集リンクを使ってここにも投稿してください。 – ib11

答えて

0

を引用します引用内:

$re = "/^\"name\": \"[^\"]*?(\")*?[^\"]*?(\")*?[^\"]*?\"$/"; 
$str = "\"Steak \"au Four\" \""; 

preg_match($re, $str, $matches); 

Sample demo here

+0

それは動作していますが、 "名前:"正規表現にする必要があります、pls私にそれを行うことができます、私は初心者 –

+0

@ NaomiNaomi今私はこれを最初に追加しました。しかし、これは、この文字列 '' name "の後ろに1組の引用符を置き換えるだけであることを理解しています:" '**ここ**' "' – ib11

+0

(これもオプションです。 'str_replace()'を使うと、 'value'の引用符のすべてのインスタンスを置き換えます。 – ib11

1

試合のない使用することはありません置き換えるために正規表現を使って引用符を付けるのは、あなたが終わる唯一のことは引用自体です。

実は、それはあなたが(あなたがdocumentationで見ることができる)preg_match()に述べパラメータとしてPREG_OFFSET_CAPTUREを渡すことで、インデックスと一緒にそれらを得ることができるよう、非常に真実ではありません。

さらに、二重引用符が二つ以上あるの場合はどうでしょうかその場合、正規表現はより複雑になります。その後、文字列を配列str_split()に変換するので、インデックスで要素を設定解除することができます。最後に配列をjoin()またはimplode()で再び文字列に変換します。

私は全体の価値をつかんで、引用符をstr_replace()に置き換える方が簡単だと思います。あなたのケースでは、このような何かを行うことができます。

$jsonLine = "\"name\":\"Steak \"au Four\" \""; 
$jsonLine = trim($jsonLine); 

$pattern = '/^(?P<name>"name"\s*:\s*)(?P<value>".*".*")$/'; 

if (preg_match($pattern, $jsonLine, $matches) === false) { 
    exit('Pattern not matched'); 
} 

$name = $matches['name']; 
$value = trim(str_replace('"', '', $matches['value'])); 

$newJsonLine = "$name\"$value\""; 

echo $newJsonLine; 

あなたがデモhereを見ることができます。