java 正则 从无规则的数据中匹配出json串
时间: 2024-02-13 22:06:24 浏览: 202
如果数据中包含多个JSON串,可以使用正则表达式来匹配出其中的JSON串。以下是一个简单的示例:
```java
String data = "Some random text {\"name\":\"张三\",\"age\":18,\"gender\":\"male\"} Some more random text {\"name\":\"李四\",\"age\":20,\"gender\":\"female\"} Even more random text";
String regex = "\\{.*?\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
String jsonStr = matcher.group();
System.out.println(jsonStr);
}
```
上述代码中,我们使用正则表达式 `\\{.*?\\}` 来匹配所有的JSON串。其中,`\{` 和 `\}` 分别用于匹配左右大括号,`.*?` 表示尽可能少地匹配任意字符,以防止多个JSON串被误匹配为一个。最后,我们使用 `Matcher` 对象来查找所有匹配的JSON串,并将其打印出来。
需要注意的是,这种方法虽然可以匹配出所有的JSON串,但是无法保证它们的正确性,因为数据中可能会包含非JSON的文本。因此,在解析JSON串时,最好还是使用专门的JSON解析库。
相关问题
java 正则匹配json串
可以使用正则表达式来匹配JSON串,但是最好不要使用正则表达式来解析JSON,因为JSON规范比较复杂,而且会有很多特殊情况,使用正则表达式容易出现漏洞和错误。建议使用JSON解析库来解析JSON。
如果一定要使用正则表达式来匹配JSON串,可以使用如下的正则表达式:
```
String pattern = "\\{.*\\}";
String jsonString = "{\"name\":\"张三\",\"age\":18}";
boolean isMatch = jsonString.matches(pattern);
System.out.println(isMatch); // 输出 true
```
解释:
- `\\{` 表示 { 字符
- `.*` 表示匹配任意字符任意次数
- `\\}` 表示 } 字符
这个正则表达式可以匹配任意包含在 { 和 } 之间的字符串,即符合JSON格式的字符串。但是要注意,这个正则表达式只能匹配没有嵌套结构的JSON串,如果有嵌套结构,就无法完全匹配。因此,还是建议使用JSON解析库来解析JSON串。
java 正则过滤json串
可以使用正则表达式过滤JSON串中的某些字符串。比如,假设我们想要过滤掉JSON串中的某个字段,可以使用如下代码:
```java
String jsonStr = "{\"name\":\"张三\",\"age\":18,\"gender\":\"male\"}";
String regex = "\"gender\":\"[^\"]+\",?";
String filteredJsonStr = jsonStr.replaceAll(regex, "");
System.out.println(filteredJsonStr);
```
上述代码中,我们使用了正则表达式 `\"gender\":\"[^\"]+\",?` 来匹配JSON串中的 `gender` 字段及其值,并将其替换为空字符串,从而达到过滤的效果。
阅读全文