わかりましたので、私が持っているのは 1 つまたは多くの要素を含むことができる JSON 文字列です。以下に文字列の例を示しますが、これは実際の文字列がはるかに複雑な例にすぎません。この 1 つのハイライトは、私が抱えている問題です。
{"elements":[{"id":2,"string":"something","string2":"","string3":"no html here","integer":2,"array":{"options":[{"id":1,"value":"data"},{"id":2,"value":"more data"}]},"string4":"text with <a href=\"http:\/\/www.example.com\">html<\/a>","string5":"naughty <a href=\"http:\/\/www.example.com\">link<\/a>"},{"id":2,"string":"something","string2":"","string3":"no html here","integer":2,"array":{"options":[{"id":1,"value":"data"},{"id":2,"value":"more data"}]},"string4":"text with <a href=\"http:\/\/www.example.com\">html<\/a>","string5":"naughty <a href=\"http:\/\/www.example.com\">link<\/a>"}]}
私がやろうとしているのは、JSON データ内のすべての文字列 (名前ではなくデータ型) を照合し、HTML が許可されているかどうかに応じて (ブラックリストを使用して) HTML を削除することです。私は正規表現の専門家ではないので、何が問題なのかわかりません。
これが私の正規表現です:-
([{,]"(?!(elements|string3|string4)":)(.*?)":)(?!,")"(.*?)",
私はそれに2つの問題があります:-
次の文字列内で見つかった " にジャンプするだけで、整数と配列の両方で要素を一致させます。一致が失敗して次に進むことを期待していました
URL の \" を処理することができないので、正規表現の最後に , が必要ですが、これは \G を試した次の文字列の一致で停止しますが、これは影響がないように見えました。の後に、前の試合で、エスケープされたテキストを許可すると思われる多くのソリューションも試しましたが、これらはすべて私の場合は機能しませんでした。
これは、JSON 文字列をオブジェクトに変換し、数百の要素の配列をトラバースして HTML を削除するよりも高速であると考えられていました。