我需要添加到我們的日誌管理解決方案中的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