在我的代碼,我在斯卡拉做一個正則表達式匹配的情況是這樣的:如何讓RegEx更高效?
line match {
case regexp(unix_time, elapsed, remotehost, code_status, bytes, method, url, rfc931, peerstatus_peerhost, file_type) =>
LogLine(getHumanDate(unix_time), elapsed, remotehost, code_status, bytes, method, url, rfc931, peerstatus_peerhost, file_type)
case _ => throw new IllegalArgumentException("Could not parse row: " + line)
}
我使用這個正則表達式。
val regexp = """(\d{9,10}\.\d{3})\s*(\d+) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (\w+\/\d+) (\d+) (\w+) (\S+) (\-) (\w+\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\w+\/\-) (\S+)""".r
我想讓它更具性能。我得到了它的工作,但它不是很快,我想它可以做得更好。
下面是需要符合一些樣品數行:
1393930710.739 278 192.168.1.20 TCP_MISS/200 5848 GET http://www.coderanch.com/templates/default/images/quote.gif - HIER_DIRECT/145.20.133.81 text/plain
1393930719.989 73 192.168.178.27 TCP_MEM_HIT/200 268805 GET http://sunny:8080/viewapp/classpath/jquery.js - HIER_NONE/- application/x-javascript
1393997284.209 59287 192.168.1.2 TCP_MISS/503 0 CONNECT 172.104.89.123:5228 - HIER_NONE/- -
你究竟做了什麼?*知道「行匹配正則表達式」? – Smutje
如果合適,您應該用*替換全部*。儘可能減少選項。 – wumpz
您是否嘗試用'+'替換所有長度限定符? – Bill