在Java中使用Regex进行模式匹配

时间:2017-12-19 00:52:13

标签: java regex

我有一个流,我从中读取了一个如下所示的字符串:

event.tag.report tag_id=0xABCD0029605, type=ISOB_80K, antenna=1, frequency=918250, rssi=-471, tx_power=330, time=2017-12-18T19:44:07.198
                        ^^^^^^^^^^^^^

我正在尝试使用正则表达式为我读取的每个字符串获取突出显示的部分(由^^^^加下划线)。我对正则表达式的模式如下:

.*\\s(tag_id=)(.{38})(\\,\\s)(.*)$

但是,对于长度超过或短于38位的tag_id,这不起作用。

有人可以帮我一个字符串模式,这将帮助我获得字符串中突出显示的区域,而不受其大小的影响吗?

1 个答案:

答案 0 :(得分:1)

向我看,好像你想要所有的十六进制字符:

"tag_id=(0x[A-F0-9]+)"

所以

Pattern pattern = Pattern.compile("tag_id=(0x[A-F0-9]+)");
Matcher matcher = pattern.matcher("event.tag.report tag_id=0x313532384D3135374333343435393031, type=ISOC");
if (matcher.find())
    System.out.println(matcher.group(1));

返回:

0x313532384D3135374333343435393031