gpt4 book ai didi

ruby - 匹配多行模式的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:51 28 4
gpt4 key购买 nike

我有一个日志文件 test_list.txt,如下所示:

Processing SampleDocumentController#index (for 101.101.101.101 at 2020-12-12 12:00:00) [POST]
Session ID: sdfgs923jks0dm23mlasf3da9asfjvyur
Parameters: {"format"=>"xml", "controller"=>"sample_document", "q"=>"last_updated_at", "action"=>"index"}
Completed in 0.00529 (189 reqs/sec) | Rendering: 0.00007 (1%) | DB: 0.00126 (23%) | 200 OK [https://www.bars.com/sample/sample_document.lmx?]

我有一个正则表达式来捕获日志文件的方法和 session ID:

regex = /\[([A-Z]+)\]\D+([a-zA-Z0-9]{32}$)/i

当我单独运行它时,它工作正常并返回捕获的字符串 "POST""sdfgs923jks0dm23mlasf3da9asfjvyur"。但是,使用以下脚本 test.rb:

File.open("test_list.txt").each do |li|
if !li.nil?
x = li.match(regex)
if !x.nil?
a, b = x.captures
p a
p b
end
end
end

在命令行中运行 ruby test.rb 不会打印任何内容。

知道为什么它不适用于脚本吗?

最佳答案

这是因为您的正则表达式仅在方法和 session ID 都存在时才匹配。在您的日志文件中,它们位于不同的行,并且没有一行包含两者。因此,没有一行与正则表达式匹配。

关于ruby - 匹配多行模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54456483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com