2012-03-27 15 views
1

私はRubyのptyを試してみるために少しテストをしていました。私は主な問題は、正規表現は非貪欲であるということだと思います。
The whole output is ||||
password1234
Thank you! Your password is: p||||
output1 = |
|
output1 = |password1234
|
output1 = |Thank you! Your password is: p|
Rubyの非貪欲な正規表現:ptyと期待

:出力を印刷するとき、私はこれを取得残念ながら

require 'pty' 
require 'expect' 

#$expect_verbose = true 

#answer = %r/Thank you! Your password is: \w+/ 

PTY.spawn("ruby ./inputs.rb") do |reader, writer, pid| 

    writer.sync = true 

    reader.expect(/[email protected] password:/) do |output| 
     writer.puts("password1234") 
    end 

    #reader.expect(answer) do |output| 
    #reader.expect(/Thank you! Your password is: \w{6,}/) do |output| 
    #reader.expect(/Thank you! Your password is: (\w+)/) do |output| 
    reader.expect(/Thank you! Your password is: \w+/) do |output| 
     puts "The whole output is ||||#{output}||||\n" 
     output.first.each do |line| 
     puts "output1 = |#{line}|\n" 
     end 
    end 

end 

この

inputs.rbと呼ばれるプログラムである:

puts "Give me [email protected] password:" 
password = gets.chomp() 
puts "Thank you! Your password is: #{password}" 

そして、これはtest.rbと呼ばれるプログラムであり、なぜですか?
Thank you! Your password is: p||||
Thank you! Your password is: password1234|||| の代わりに ?

これは正常ですか?場合は:この動作を変更する方法はありますか?私が試してみました

もの:

Rubyのバージョン:1.8.7
のUbuntu:10.04(明晰リンクス)

私はあなたが持つかもしれないアイデアを理解するだろう。どうもありがとうございました。

+1

実際の質問を正確に示すために質問をトリミングする必要があります。 – sawa

答えて

0

キャリッジリターンが "+"量子を混乱させるように見えます。

は、以下の(出力書式を台無しにし、トリミングしなければならない)、キャリッジリターンを含む行全体、

reader.expect(/Thank you! Your password is: \w+\r/) do |output| 

幸運に一致します。

+0

ありがとうございます。私はついに\ r \ nの代わりに\ rを使用しましたが、これを指摘してくれてありがとう。 – dcere

関連する問題