2011-11-20 41 views
3

我在ruby文件中有以下2個正則表達式。當我使用ruby命令時它們運行良好,但如果我嘗試通過./apachereport.rb運行,它會生成一個錯誤。Ruby正則表達式使用ruby命令,但不是shebang

正則表達式:

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+/ 

我使用的家當是如下,這似乎很好地工作與其他Ruby文件:

#!/usr/bin/ruby 
+0

試試'哪個ruby' - 當你運行ruby時,它是和'apachereport.rb'使用的*相同的* ruby​​命令嗎? – freiheit

+0

這有助於感謝。 – CoryDorning

回答

5

的最可能的解釋是你已經安裝了多個版本的ruby。安裝在/usr/bin(這是您在shebang產品線中使用的版本)中安裝的版本是1.8.X,它在正則表達式中不支持?<=(後視)。你輸入ruby apachereport時執行的可能是ruby 1.9,它支持?<=

要驗證這是which ruby的案件類型,並注意它打印其他的東西比/usr/bin/ruby和/或/usr/bin/ruby --version結果比較ruby --version

+0

這是它的感謝。 – CoryDorning