Java 正则表达式中的懒惰匹配
来源:互联网 发布:淘宝买家信誉度查询 编辑:程序博客网 时间:2024/05/29 11:01
最近在搞一个手机应用,其中一部分涉及到了webservice,由于webservice这部分也是自己做,所以在取回数据的时候,需要自己解析数据。
返回的数据是jason格式,关于jason格式的包应该很多了,但是由于数据不大,所以想自己写写解析部分,去年的时候做新浪微博应用,用的c++编写,解析jason是最原始的办法,自己进行字符串的匹配,由于没于语言本身没有正则表达式的支持,只能依赖与第三方库,还是因为自己懒,不想找,所以写了一个很挫很挫的解析过程,就不多说了。
String res="[{\"id\":13,\"receiveTime\":\"2013-04-20 00:00:00 星期六\",\"sensorType\":\"0 \",\"value\":\"19\"},{\"id\":14,\"receiveTime\":\"2013-04-21 00:00:00 星期日\",\"sensorType\":\"1 \",\"value\":\"20\"},{\"id\":3,\"receiveTime\":\"2013-04-14 00:00:00 星期日\",\"sensorType\":\"2 \",\"value\":\"20\"},{\"id\":4,\"receiveTime\":\"2013-04-15 00:00:00 星期一\",\"sensorType\":\"3 \",\"value\":\"20\"},{\"id\":15,\"receiveTime\":\"2013-04-23 00:00:00 星期二\",\"sensorType\":\"5 \",\"value\":\"21\"},{\"id\":6,\"receiveTime\":\"2013-04-16 00:00:00 星期二\",\"sensorType\":\"6 \",\"value\":\"20\"},{\"id\":7,\"receiveTime\":\"2013-04-17 00:00:00 星期三\",\"sensorType\":\"7 \",\"value\":\"22\"},{\"id\":8,\"receiveTime\":\"2013-04-18 00:00:00 星期四\",\"sensorType\":\"8 \",\"value\":\"32\"},{\"id\":9,\"receiveTime\":\"2013-04-19 00:00:00 星期五\",\"sensorType\":\"9 \",\"value\":\"21\"},{\"id\":10,\"receiveTime\":\"2013-04-19 00:00:00 星期五\",\"sensorType\":\"10\",\"value\":\"15\"},{\"id\":11,\"receiveTime\":\"2013-04-19 00:00:00 星期五\",\"sensorType\":\"11\",\"value\":\"20\"},{\"id\":12,\"receiveTime\":\"2013-04-20 00:00:00 星期六\",\"sensorType\":\"12\",\"value\":\"18\"}]; }";Pattern values=Pattern.compile("\"receiveTime\":\"(.*?)\",(.*?)\"value\":\"(\\d+)\"\\}"); Matcher matchr = values.matcher(res); while(matchr.find()) { System.out.println(matchr.group(1)); System.out.println(matchr.group(3)); }
如代码中所示,这些数据是从传感器中读去然后由webservice返回,我的任务就是将每一个传感器的时间和数据取回来。
在网上找了半天关于java惰性匹配的资料,百度了半天也没找到一个有用的,说什么在Pattern.compile("****/g"),在正则的最后加上一个“/g”,在php里边的确可以,但是在java里不行了,谷歌了一下,马上就找到了正确的方法是在匹配的时候加上一个?
这个是要解析的一条数据:
{"id":13,"receiveTime":"2013-04-20 00:00:00 星期六","sensorType":"0 ","value":"19"},
上边的代码while循环每一次可以匹配到这么一条信息,如果把正则括号里的?去掉,那么就会直接默认贪心匹配到整个字符串的末尾,不是我们需要的。
Pattern.compile("\"receiveTime\":\"(.*?)\",(.*?)\"value\":\"(\\d+)\"\\}");
第一个括号会匹配时间,第二个会匹配到"sensorType":"0 ",(注意这里也必须用?来进行懒惰匹配,否则依然会匹配到字符串末尾),然后第三个会匹配数字,这样就拿到了我们所需要的东西了。
- Java 正则表达式中的懒惰匹配
- 正则表达式懒惰匹配
- 正则表达式中的贪婪匹配和懒惰匹配
- 正则表达式懒惰匹配,和贪婪匹配
- 正则表达式 懒惰匹配与贪婪匹配
- 正则中的“贪婪匹配”和“懒惰匹配”
- java中的正则表达式匹配
- (PHP)正则表达式-贪婪匹配与懒惰匹配的区别
- 正则表达式的贪婪匹配与懒惰匹配
- 正则表达式的【贪婪匹配】和【懒惰匹配】
- 正则表达式的贪婪匹配与懒惰匹配
- 正则表达式的贪婪匹配与懒惰匹配
- 正则表达式中的贪婪与懒惰
- 正则表达式中的贪婪与懒惰模式
- PHP正则表达式-贪婪与懒惰匹配
- PHP正则表达式-贪婪与懒惰匹配
- 正则表达式学习笔记011--贪婪和懒惰的匹配
- 正则表达式的懒惰匹配和前瞻等
- 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
- "NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent sto
- ImportError: No module named XXXX
- Xcode修改新建文件中的create by和 __My Company__
- IDA反汇编/反编译静态分析iOS模拟器程序(六)交叉引用
- Java 正则表达式中的懒惰匹配
- 天梯--拉尔夫
- IOS疯狂基础之AddressBook通讯录
- 在Window+VS2010 下新建Cocos2D-X HelloWorld 项目
- javascript的amd规范
- Android如何引用其他工程
- 第20章STL set与multiset
- selectboxにoption要素の追加・削除をする。
- 马虎的算式