【发布时间】:2015-04-27 05:49:03
【问题描述】:
我有一个贯穿我的 apache 日志的小型 PHP 脚本 - 我正在尝试将此脚本转换为 Go。但是,我很难找到与 PHP 函数 preg_match 等效的函数。
在我的 PHP 脚本中,我在日志文件的每一行上运行 preg_match,如下所示:
preg_match('/([.0-9]+) .*?\[([0-9a-zA-Z:\/+ ]+)\].*?"[A-Z]+ \/([^\/ ]+)\/([a-zA-Z0-9\-.]+).*" ([0-9]{3}) .*"(.*?)"$/', $line, $matches)
在这个日志上运行这个表达式:
100.100.100.100 - - [23/Feb/2015:03:03:56 +0100] "GET /folder/file.mp3 HTTP/1.1" 206 5637064 "-" "AppleCoreMedia/1.0.0.12B466 (iPhone; U; CPU OS 8_1_3 像 Mac OS X; da_dk)"
返回以下数组(我只对 [1-6] 感兴趣:
Array
(
[0] => 100.100.100.100 - - [23/Feb/2015:03:03:56 +0100] "GET /folder/file.mp3 HTTP/1.1" 206 5637064 "-" "AppleCoreMedia/1.0.0.12B466 (iPhone; U; CPU OS 8_1_3 like Mac OS X; da_dk)"
[1] => 100.100.100.100
[2] => 23/Feb/2015:03:03:56 +0100
[3] => folder
[4] => file.mp3
[5] => 206
[6] => AppleCoreMedia/1.0.0.12B466 (iPhone; U; CPU OS 8_1_3 like Mac OS X; da_dk)
)
所以我的问题是 - 在 Go 中是否有一个很好的等价物?我尝试了一些不同的正则表达式方法,但似乎找不到适合我的方法。
谢谢
【问题讨论】:
-
可以使用正则表达式:golang.org/pkg/regexp
-
如果您以当前的最佳尝试进行编辑,有时它有助于提示读者。它不一定有效,但一般来说,它有助于表明您是如何思考问题的。