有 log 如下
2016-03-21 21:36:20.878 INFO 17512 --- [main] This is going well ok: [goingwell] => { "localresult": { "aa":"bb", "aaa":"bbb" } } 2016-03-21 21:36:30.878 INFO 17512 --- [main] Continue... 2016-03-21 21:36:40.878 INFO 17512 --- [main] Logging ...
如何得到 localresult={ aa:'bb', aaa:'bbb'}?
假设用 java 语言。
![]() | 1 knightdf 2016-03-21 22:28:56 +08:00 正则啊。。。 |
![]() | 2 singer 2016-03-21 22:47:09 +08:00 via iPhone 转成 json 格式,再取 |
3 crystom 2016-03-22 00:00:13 +08:00 不是时间戳开头的行取出来吧 |
4 TaoAlpha 2016-03-22 01:11:20 +08:00 ![]() |
![]() | 5 bombless 2016-03-22 06:08:33 +08:00 via Android 是我的话先用 awk 处理掉胖箭头和它之前的东西 |
![]() | 6 lyklykkkkkkk OP 更新: https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Chomsky-hierarchy.svg/800px-Chomsky-hierarchy.svg.png 按照上图乔姆斯基文法分类, Json 本身是上下文无关语法,高于正则表达式的表达能力,所以普通 regex 没有能力严格描述 Json ,甚至括号匹配都无法完成。 正则表达式的变种, PCRE ,支持更多模式,比如递归,可以描述大括号的匹配。如 @TaoAlpha 的解决方案。 但 Java 的正则没有这么强,我也没有找到 Java 能用的 PCRE 库。所以四楼的正则表达式没法直接用,必须去掉递归,将递归降级成有限层次的递归匹配, Java 才能处理了(一般 json 嵌套也就三四层)。 比如这样: https://regex101.com/r/aF7aH6/4 |