与regexp匹配并将其传递给文件无法正常工作

时间:2013-05-13 20:48:55

标签: ruby

我正在尝试在文本中获取URL并将URL写入文件。

我使用此代码:

message = $stdin.read 
test = message.match('http:\/\/(.*?)$')

File.open('test.txt', 'w') do |f2|  

f2.puts "#{test}"
end  

此文本位于消息变量中:

Die Spende muss vom Empfänger sowie Sender per E-Mail bestätigt werden. Um die Spende zu bestätigen klicke auf folgenden Link:
http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03

但是在文本文件中出现了这个:

http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424=

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不认为您阅读的信息包含您认为的内容。从$stdin取出读取并使用字符串文字,我看到匹配的预期结果:

message = "Die Spende muss vom Empfänger sowie Sender per E-Mail bestätigt werden. Um die Spende zu bestätigen klicke auf folgenden Link:
http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03"
=> "Die Spende muss vom Empfänger sowie Sender per E-Mail bestätigt werden. Um die Spende zu bestätigen klicke auf folgenden Link:\nhttp://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03"

test = message.match('http:\/\/(.*?)$')
=> #<MatchData
 "http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03"
 1:"server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03">

"#{test}" # or test.to_s
=> "http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424f-917c-4dcec3529f03"

匹配结果的最终=表示输入可能采用某种格式打破长行,以=结尾。例如:

message = <<EOM
Die Spende muss vom Empfänger sowie Sender per E-Mail bestätigt werden=
. Um die Spende zu bestätigen klicke auf folgenden Link:
http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424=
f-917c-4dcec3529f03
EOM

test = message.match('http:\/\/(.*?)$').to_s
=> "http://server.nitrado.net/deu/donations/verify/18074/4f8b31ac-5400-424="

Regexp meta-char .匹配除换行[^\n]之外的任何字符,这解释了为什么捕获停止在此输入的位置。