Ruby中的非贪婪正则表达式:pty和expect

Ruby中的非贪婪正则表达式:pty和expect,ruby,regex,expect,pty,non-greedy,Ruby,Regex,Expect,Pty,Non Greedy,我正在做一个小测试来尝试Ruby的pty,但我不能正确地得到它。我认为主要的问题是正则表达式是非贪婪的 这是一个名为inputs.rb的程序: 给我root@server密码: password=gets.chomp 谢谢你!您的密码是:{password} 这是一个名为test.rb的程序: 需要“pty” 需要“期望” $expect\u verbose=true 回答=%r/谢谢!您的密码是:\w+/ PTY.spawnruby./inputs.rb do |读写器、pid| writer

我正在做一个小测试来尝试Ruby的pty,但我不能正确地得到它。我认为主要的问题是正则表达式是非贪婪的

这是一个名为inputs.rb的程序:

给我root@server密码: password=gets.chomp 谢谢你!您的密码是:{password} 这是一个名为test.rb的程序:

需要“pty” 需要“期望” $expect\u verbose=true 回答=%r/谢谢!您的密码是:\w+/ PTY.spawnruby./inputs.rb do |读写器、pid| writer.sync=true 读者期待/root@server密码:/do |输出| writer.putspassword1234 终止 reader.expectanswer do |输出| 读者:期待/谢谢!您的密码是:\w{6,}/do| output| 读者:期待/谢谢!您的密码是:\w+/do | output| 读者:期待/谢谢!您的密码是:\w+/do | output| 将整个输出设置为| | | |{output}| | | \n output.first.each do|行| puts output1=|{line}|\n 终止 终止 终止 不幸的是,在打印输出时,我得到以下结果: 整个输出是|||| 密码1234 非常感谢。你的密码是:p|||| 输出1=| | output1=|密码1234 | 输出1=|谢谢!你的密码是:p|

为什么 非常感谢。你的密码是:p|||| 而不是 非常感谢。您的密码是:password1234|||| ?

这正常吗?如果是这样的话:有没有办法改变这种行为

我尝试过的事情:

rubular上的正则表达式:它有效。 所有被评论的备选方案:没有一个可以获得完整的密码。 Ruby版本:1.8.7 Ubuntu:10.04 Lucid Lynx


如果您有任何想法,我将不胜感激。非常感谢。

看起来回车符混淆了+量词

以下内容与整行内容匹配,包括回车符,该回车符会弄乱输出格式,应进行修剪

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

祝你好运。

你应该精简你的问题,找出真正的问题。非常感谢。我最终使用了\r\n而不是\r\n,但感谢您指出这一点。