我尝试使用PCRE正则表达式来提取一些JSON。我使用的MariaDB版本没有JSON函数,但有REGEX函数。
我的字符串是:{"device_types":["smartphone"],"isps":["a","B"],"network_types":[],"countries":[],"category":["Jebb","Bush"],"carriers":[],"exclude_carriers":[]}
我想要抓取category
的内容。我想要一个包含2个项目的匹配组,Jebb
和Bush
(或者数组中的项目数量)。
我尝试了这个模式,但它只匹配第一次出现的情况:/(?<=category":\[).([^"]*).*?(?=\])/g
7条答案
按热度按时间c8ib6hqw1#
这符合您的需要吗?它应该与类别数组匹配,而不管其大小。
"category":(\[.*?\])
regex101 example
5us2dqdw2#
JSON不是一种常规语言。因为它允许任意嵌入平衡的
分隔符,它必须至少是上下文无关的。
例如,考虑一个数组的数组:
[ [ [ 1, 2], [2, 3] ] , [ [ 3, 4], [ 4, 5] ] ]
显然你不能用真正的正则表达式来解析它。
参见本主题:Regex for parsing single key: values out of JSON in Javascript可能对您有帮助。
kkih6yb83#
使用一组非捕获组可以extract a predefined json array
正则表达式答案:
(?:\"category\":)(?:\[)(.*)(?:\"\])
那个表达式提取
"category":["Jebb","Bush"]
,所以访问第一个组来提取数组,java代码示例:ewm0tg9j4#
有很多种方法,一种比较草率的方法是
/([A-Z])\w+/g
请在您的控制台上尝试,如
好吧,上面的内容是相当草率的,但是一个坚实的单一正则表达式解决方案,无论数量如何,一个接一个地提取每个元素,并将它们放在数组(res)中,如下所示......
查看@http://regexr.com/3d4ee
好吧,让我们来做吧。我已经想出了一个邪恶的想法。如果JS有look-behinds,这可以简单地通过反转我使用look-forward的前一个例子中的应用逻辑来完成。唉,没有......所以我决定把世界反过来。看看这个。
用你的控制台确认一下。
xzlaal3s5#
在c++中你可以这样做
xoshrz7s6#
bprjcwpo7#
如果数组中的元素数量有限(且易于管理),您可以使用有限数量的可选元素来定义它。就像最多5个元素的这个:
regex101 example here。
问候。