3

我在 ruby​​ 文件中有以下 2 个正则表达式。当我使用ruby命令时它们运行良好,但如果我尝试通过./apachereport.rb它运行会产生错误。

正则表达式:

urls = parse(@file, /(?<=GET )\S+/)
codes = parse(@file, /(?<=HTTP\/[0-9]\.[0-9]" )\S+/)

错误:

./apachereport.rb:34: undefined (?...) sequence: /(?<=GET )\S+/
./apachereport.rb:47: undefined (?...) sequence: /(?<=HTTP\/[0-9]\.[0-9]" )\S+/

我正在使用的 shebang 如下,它似乎可以与其他 ruby​​ 文件一起使用:

#!/usr/bin/ruby
4

1 回答 1

5

最可能的解释是您安装了多个版本的 ruby​​。安装的版本/usr/bin(这是您在 shebang 行中使用的版本)是 1.8.X,它在正则表达式中不支持?<=(后视)。键入时执行ruby apachereport的可能是 ruby​​ 1.9,它确实支持?<=.

要验证是否是这种情况,请输入which ruby并注意它打印的内容不是/usr/bin/ruby和/或比较/usr/bin/ruby --versionto的结果ruby --version

于 2011-11-20T17:30:53.420 回答