Tag: regex

为什么String#gsub会双重内容?

s = “#main= ‘quotes’ s.gsub “‘”, “\\'” # => “#main= quotes’quotes” 这似乎是错误的,我希望得到”#main= \\’quotes\\'” 当我不使用转义字符时,它按预期工作。 s.gsub “‘”, “*” # => “#main= *quotes*” 所以必须与逃避有关。 使用ruby 1.9.2p290 我需要用反斜杠和引号替换单引号。 更多的不一致: “\\'”.length # => 2 “\\*”.length # => 2 # As expected “‘”.gsub(“‘”, “\\*”).length # => 2 “‘a'”.gsub(“‘”, “\\*”) # => “\\*a\\*” (length==5) # WTF next: “‘”.gsub(“‘”, “\\'”).length # => […]

正则表达式“char类错误中的空范围”

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