如果用正则表达式匹配出字符串中的某个字段

dongtao1010 2016-03-28 05:51:18
本人至今还是小白一枚,现在尝试获取一个URL上的数据,获取的数据如下:
jsonp1({
"ajaxResult":{
"code":1,
"message":"有数据"
},
"chapterlist":{
"asc":0,
"chapterCount":29,
"chapters":[{"chapterId":24884172,"chapterName":"正文 第一章 死亡与新生","level":0,"orderNum":1,"tomeId":1232432},
{"chapterId":25239091,"chapterName":"正文 第二章 入门","level":0,"orderNum":2,"tomeId":1232432},
{"chapterId":25239096,"chapterName":"正文 第三章 初窥门径","level":0,"orderNum":4,"tomeId":1232432},
{"chapterId":25239176,"chapterName":"正文 第四章 送上门的半吊子师父","level":0,"orderNum":5,"tomeId":1232432}]
,"pageNum":1,"pageSize":20}})

其中红色部分是我想要获取的数据,我知道该数据是json格式的,但是该数据前面有一部分前缀,所以需要先将该数据进行截取。
因为考虑到该数据段可能会变动,所以想采用正则匹配的方式来进行匹配,想问一下具体的编程实现是怎样实现的啊?
是否还有更加简洁的方法能够获取这一块的数据呢?

...全文
889 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongtao1010 2016-03-29
  • 打赏
  • 举报
回复
引用 7 楼 rickylin86 的回复:

import java.util.Scanner;
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import static java.nio.file.StandardOpenOption.*;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String source = loadFile();
		String content = getContent(source);
		System.out.println(content);
	}

	private static String getContent(String source){
		String regex="\\[.*?\\]";//如果不验证有效性的话直接用. regex="\\[.*?\\]";
		//如果不够用,需要验证有效性的话可以在回复里留言.我再写.
		Matcher matcher = Pattern.compile(regex).matcher(source);
		String result = null;
		if(matcher.find()){
			result = matcher.group(0);
		}
		return result;
	}

	private static String loadFile(){
		StringBuffer content = new StringBuffer();
		try(Scanner file = new Scanner(Files.newInputStream(path,READ));){
			while(file.hasNextLine()){
				content.append(file.nextLine());
			}
		}catch(IOException e){
			e.printStackTrace();
			System.exit(1);
		}

		return content.toString();
	}

	private static final Path path = Paths.get(System.getProperty("user.dir")).resolve("data.txt");
	/*
	数据源:data.txt内容:
	jsonp1({
	"ajaxResult":{
	"code":1,
	"message":"有数据"
	},
	"chapterlist":{
	"asc":0,
	"chapterCount":29,
	"chapters":[{"chapterId":24884172,"chapterName":"正文 第一章       死亡与新生","level":0,"orderNum":1,"tomeId":1232432},
	{"chapterId":25239091,"chapterName":"正文 第二章       入门","level":0,"orderNum":2,"tomeId":1232432},
	{"chapterId":25239096,"chapterName":"正文 第三章       初窥门径","level":0,"orderNum":4,"tomeId":1232432},
	{"chapterId":25239176,"chapterName":"正文 第四章      送上门的半吊子师父","level":0,"orderNum":5,"tomeId":1232432}],"pageNum":1,"pageSize":20}})
	*/
}
非常感谢你,就是要这个,谢谢了!!!
rickylin86 2016-03-28
  • 打赏
  • 举报
回复

import java.util.Scanner;
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import static java.nio.file.StandardOpenOption.*;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String source = loadFile();
		String content = getContent(source);
		System.out.println(content);
	}

	private static String getContent(String source){
		String regex="\\[.*?\\]";//如果不验证有效性的话直接用. regex="\\[.*?\\]";
		//如果不够用,需要验证有效性的话可以在回复里留言.我再写.
		Matcher matcher = Pattern.compile(regex).matcher(source);
		String result = null;
		if(matcher.find()){
			result = matcher.group(0);
		}
		return result;
	}

	private static String loadFile(){
		StringBuffer content = new StringBuffer();
		try(Scanner file = new Scanner(Files.newInputStream(path,READ));){
			while(file.hasNextLine()){
				content.append(file.nextLine());
			}
		}catch(IOException e){
			e.printStackTrace();
			System.exit(1);
		}

		return content.toString();
	}

	private static final Path path = Paths.get(System.getProperty("user.dir")).resolve("data.txt");
	/*
	数据源:data.txt内容:
	jsonp1({
	"ajaxResult":{
	"code":1,
	"message":"有数据"
	},
	"chapterlist":{
	"asc":0,
	"chapterCount":29,
	"chapters":[{"chapterId":24884172,"chapterName":"正文 第一章       死亡与新生","level":0,"orderNum":1,"tomeId":1232432},
	{"chapterId":25239091,"chapterName":"正文 第二章       入门","level":0,"orderNum":2,"tomeId":1232432},
	{"chapterId":25239096,"chapterName":"正文 第三章       初窥门径","level":0,"orderNum":4,"tomeId":1232432},
	{"chapterId":25239176,"chapterName":"正文 第四章      送上门的半吊子师父","level":0,"orderNum":5,"tomeId":1232432}],"pageNum":1,"pageSize":20}})
	*/
}
imfang 2016-03-28
  • 打赏
  • 举报
回复
引用 3 楼 dongtao1010 的回复:
[quote=引用 2 楼 qnmdcsdn 的回复:] 既然是json格式的了,直接转换成json对象取值不就可以了
主要是原始数据不是json格式的,需要删掉一部分才是[/quote] 那就构造json对象,用json处理上最方便的。 我想你绝对不是仅想要红色部分的字符串。
dongtao1010 2016-03-28
  • 打赏
  • 举报
回复
引用 5 楼 imfang 的回复:
[quote=引用 3 楼 dongtao1010 的回复:] [quote=引用 2 楼 qnmdcsdn 的回复:] 既然是json格式的了,直接转换成json对象取值不就可以了
主要是原始数据不是json格式的,需要删掉一部分才是[/quote] 那就构造json对象,用json处理上最方便的。 我想你绝对不是仅想要红色部分的字符串。[/quote] 是的,还有其他信息我也想要,我的思路是先要截取红色部分字符串,因为他就是json的数组格式,那样就可以用一些工具包来进行json解析了,现在前提是如何提取红色部分字符串,因为字符串会随着网站更新,他的长度会发生变化,所以我想采用正则表达式匹配的方式来进行,可以实现吗?
dongtao1010 2016-03-28
  • 打赏
  • 举报
回复
引用 1 楼 imfang 的回复:
如果想得到红色部分的整个字符串,还是下面的比较方便: 搜索: "chapters":,"pageNum" 然后截取字串
具体应该怎样操作?
dongtao1010 2016-03-28
  • 打赏
  • 举报
回复
引用 2 楼 qnmdcsdn 的回复:
既然是json格式的了,直接转换成json对象取值不就可以了
主要是原始数据不是json格式的,需要删掉一部分才是
  • 打赏
  • 举报
回复
既然是json格式的了,直接转换成json对象取值不就可以了
imfang 2016-03-28
  • 打赏
  • 举报
回复
如果想得到红色部分的整个字符串,还是下面的比较方便: 搜索: "chapters":,"pageNum" 然后截取字串

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧