0 レビュー
1 回答
php-JSONデータからコメントを削除します
JSONデータからすべての/*...*/
スタイルのコメントを削除する必要があります。このような文字列値になるように正規表現でそれを行うにはどうすればよいですか
{
"propName": "Hello \" /* hi */ there."
}
変更されないままですか?
わからない
0
レビュー
答え :
解決策:
最初に、バックトラック制御動詞 SKIPとFAIL(またはキャプチャ)を使用して、二重引用符で囲まれたすべてのコンテンツを回避する必要があります。 )
$string = <<<'LOD'
{
"propName": "Hello \" /* don't remove **/ there." /*this must be removed*/
}
LOD;
$result = preg_replace('~"(?:[^\\\"]+|\\\.)*+"(*SKIP)(*FAIL)|/\*(?:[^*]+|\*+(?!/))*+\*/~s', '',$string);
// The same with a capture:
$result = preg_replace('~("(?:[^\\\"]+|\\\.)*+")|/\*(?:[^*]+|\*+(?!/))*+\*/~s', '$1',$string);
パターンの詳細:
"(?:[^\\\"]+|\\\.)*+"
このパートでは、引用符で囲まれた可能性のあるコンテンツについて説明します:
" # literal quote
(?: # open a non-capturing group
[^\\\"]+ # all characters that are not \ or "
| # OR
\\\.)*+ # escaped char (that can be a quote)
"
次に、このサブパターンを (*SKIP)(*FAIL)
または(*SKIP)(?!)
で失敗させることができます。 SKIP は、パターンが後で失敗した場合、このポイントの前のバックトラックを禁止します。 FAIL は、パターンを強制的に失敗させます。したがって、引用符で囲まれた部分はスキップされます(その後、サブパターンを失敗させるため、結果に含めることはできません)。
または、キャプチャグループを使用して、置換パターンに参照を追加します。
/\*(?:[^*]+|\*+(?!/))*+\*/
このパートでは、コメント内のコンテンツについて説明します。
/\* # open the comment
(?:
[^*]+ # all characters except *
| # OR
\*+(?!/) # * not followed by / (note that you can't use
# a possessive quantifier here)
)*+ # repeat the group zero or more times
\*/ # close the comment
ここでs修飾子は、バックスラッシュが引用符内の改行の前にある場合にのみ使用されます。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。