好的,我所拥有的是一个 JSON 字符串,它可以包含 1 个或多个元素,下面我放了一个 sting 的例子,但这只是一个例子,真正的字符串要复杂得多。这个亮点是我遇到的问题。
{"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)":)(.*?)":)(?!,")"(.*?)",
我有两个问题:-
它通过简单地跳转到在下一个字符串中找到的 " 来匹配具有整数和数组的元素。我希望匹配失败并继续前进
我无法让它处理 url 中的 \" 所以我需要 , 在正则表达式的末尾,但这然后停止是我尝试过的下一个字符串匹配 \G 但这似乎没有影响我有一种感觉它开始了在上一场比赛中,在 , 之后。我还尝试了一些假设允许转义文本的解决方案,但这些都不适用于我的情况。
当时的想法是,这比将 JSON 字符串转换为对象然后遍历数百个元素的数组以删除 HTML 更快,如果这样更快,那么我就这样做会容易得多。