Ruby Regex问题text.gsub [^ \ W-],'')失败

时间:2008-09-26 11:11:16

标签: ruby regex

我正在尝试在Ruby中学习正则表达式,基于我在“The Rails Way”中阅读的内容。但是,即便是这个简单的例子也让我很难过。我不知道这是不是一个错字......

text.gsub(/ \ s /,“ - ”)。gsub([^ \ W-],'')。downcase

在我看来,这将用 - 替换所有空格,然后在字符串以非字母或数字后跟短划线开头的任何地方,用''替换它。但是,使用irb,它首先在^“语法错误,意外'^',期待']'”上失败,如果我取出^,它在W上再次失败。

我在这里很困惑。

5 个答案:

答案 0 :(得分:9)

>> text = "I love spaces"
=> "I love spaces"
>> text.gsub(/\s/, "-").gsub(/[^\W-]/, '').downcase
=> "--"

缺少//

虽然这更有意义: - )

>> text.gsub(/\s/, "-").gsub(/([^\W-])/, '\1').downcase
=> "i-love-spaces"

这可能意味着什么

>> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
=> "i-love-spaces"

\ W表示“不是一个字” \ w表示“一个字”

//生成正则表达式对象

  
    

/ [^ \ W - ]。/类     =>正则表达式

  

答案 1 :(得分:3)

第1步:Add this to your bookmarks。每当我需要查找正则表达式时,这是我的第一站

第2步:让我们来看看你的代码

text.gsub(/\s/, "-")

您正在调用gsub函数,并为其提供2个参数 第一个参数是/\s/,这是“创建包含\s的新正则表达式(对于正则表达式来说就像特殊”一样)的红宝石。
第二个参数是字符串"-"

因此,这将用连字符替换所有空格字符。到目前为止,非常好。

.gsub([^\W-], '').downcase

接下来再次调用gsub,传递2个参数。 第一个参数是[^\W-]。因为我们没有用正斜杠引用它,所以ruby会尝试运行该代码。 []创建一个数组,然后尝试将^\W-放入数组中,这是无效的代码,因此它会中断。
将其更改为/[^\W-]/会为我们提供有效的正则表达式。

查看正则表达式,[]说'匹配此组中的任何字符。该组包含\W(表示非单词字符)和-,因此正则表达式应匹配任何非单词字符或任何连字符。

你传递给gsub的第二件事是一个空字符串,它应该最后用空字符串替换所有非单词字符和连字符(从而将它们剥离)

.downcase

只是将字符串转换为小写。

希望这会有所帮助:-)

答案 2 :(得分:2)

你忘记了斜线。它应该是/[^\W-]/

答案 3 :(得分:2)

嗯,.gsub(/ [^ \ W - ] /,'')表示替换任何不是单词的东西,也不代表任何东西。

你可能想要

>> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
=> "i-love-spaces"

小写\ w(\ W恰好相反)

答案 4 :(得分:1)

斜杠是说它们之间的东西是正则表达式,就像引号说它们之间的东西是一个字符串。