我需要添加到我们的日志管理解决方案中的Radius消息有非常统一的一组数据。该产品提供了使用正则表达式以几种形式提取各种数据的功能。使用几个可重复捕获组的正则表达式
1)个人对每片数据正则表达式你想使用捕捉组拉出
<data 1 = regex statement>
<data 2 = different regex statement>
<data 2 = yet another regex statement>
2)单数正则表达式
<group = regex statement with capture groups>
<data 1 = capture group[X]
<data 2 = capture group[Y]
<data 3 = capture group[Z]
</group>
<158>Jul 6 14:33:00 radius/10.10.100.12 radius: 07/06/2010 14:33:00 AP1A-BLAH (10.10.10.10) - 6191/Wireless - IEEE 802.11: abc1234 - Access-Accept (AP: 000102030405/SSID: bork/Client: 050403020100)
欲拔出的几个位数据,所有这些都在空间之间。沿着以下线的东西似乎并不高效:
(.*?)\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s
因此,鉴于以上数据,什么是最有效的Java正则表达式,将抓住每场一组的空间之间,并把它变成一个捕获组?
为什么不是那个正则表达式看起来有效?你有性能问题吗? – 2010-07-06 19:18:45
几次重复同一部分的正则表达式(在本例中为29)似乎不是最好的选择。我没有做过这么一个统一的重复,所以我不确定它是否可以缩短。 – Chris 2010-07-06 19:51:44
29组?你应该看看使用'split()',因为@蒂姆的第二个答案建议。 – 2010-07-07 03:02:30