我的代码中有一个正则表达式,它匹配 url 的模式并抛出错误:
/^(http|https):\/\/([\w-]+\.)+[\w-]+([\w- .\/?%&=]*)?$/
错误是“char 类错误中的空范围”。我发现这是([\w- .\/?%&=]*)?
部分原因。Ruby 似乎将-
in识别\w- .
为 range 而不是文字的运算符-
。在破折号中添加转义后,问题就解决了。
但原来的正则表达式在我同事的机器上运行良好。我们使用相同版本的 osx、rails 和 ruby:Ruby 版本是 ruby 1.9.3p194,rails 是 3.1.6,osx 是 10.7.5。在我们将代码部署到我们的 Heroku 服务器之后,一切都运行良好。为什么只有我的环境对此正则表达式有错误?Ruby regex 解释的机制是什么?