在Java中使用Regex进行模式匹配
我有一个从中读取字符串的流,该字符串如下所示:在Java中使用Regex进行模式匹配,java,regex,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 ^^^^^^^^^^^^^ 我正试图使用正则表达式为我读到的每个字符串获取带下划线的突出显示部分。我的正则表达式模式如下: .*
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位的标记ID
有人能帮我创建一个字符串模式,它能帮助我获得字符串中的突出显示区域,而不受其大小的影响吗?在我看来,似乎您需要所有十六进制字符:
"tag_id=(0x[A-F0-9]+)"
所以
返回:
0x313532384D3135374333343435393031
嘿,这似乎只起到了部分作用,我无法在…之前得到整个字符串,。如果我的字符串具有标记_id=0x313532384D3135374333343435393933031,则它只输出标记_id=0x313532384D313537。@SagarNair不为我输出。我添加了测试代码,效果很好。您确定7后面没有隐藏字符吗?请尝试使用此字符串event.tag.report tag_id=0x3504B40180019F112A05F6EB,type=ISOC,antenna=2,frequency=918250,rssi=-638,tx_power=330,time=2017-12-18T20:17:02.865。很抱歉,我知道我也可以,但这对我不起作用。谢谢:@SagarNair是的,很好用。修改代码以演示。请注意,我更改了find的匹配项,因为模式匹配的是输入的一部分,而不是整个输入。
0x313532384D3135374333343435393031